繁体   English   中英

减少赋值右侧的 size_t

[英]Decrementing size_t on the right hand of assignment

为什么在这种情况下idx1 -1 ?

long long idx = (size_t)0 - 1;

cout << (size_t)0 - 1; 这将打印ULLONG_MAX

cout << idx; 这打印 -1

如果idx改为 integer 会发生什么变化?

在这份声明中

cout << (size_t)0 - 1;

由于通常的算术转换,表达式(size_t)0 - 1的类型是无符号 integer 类型size_t 因为它不能是负数,所以它的值ULLONG_MAX (似乎在使用的系统中,类型 size_t 被定义为类型unsigned long long int的别名)。

在这份声明中

long long idx = (size_t)0 - 1;

初始值设定项转换为有符号类型 long long int,即声明的 object 的类型。 UNIT_MAX 值不能放入有符号的 long long 中,因此它给出 -1。

由于所用系统中size_t类型的宽度与 long long int 类型的宽度相同。 所以 size_t 类型的初始化器的内部表示被解释为 long long 类型的值,即无符号初始化器的最高有效位被认为是符号 bit.int。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM