[英]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.