有人可以解释为什么 unsigned int 取负值吗?Anunsigned int
应该只取正值。
来自维基百科:
word, long, 双字, longword, int
无符号:从 0 到 4,294,967,295,等于 2^32 - 1
#include <stdio.h>
typedef unsigned int uint32;
int main()
{
uint32 i;
int x = -1;
i = x%32;
printf("\n\n Value of uint32 i = %d", i);
return (0);
}
输出:
Value of uint32 i = -1
以下是我在 cpp 标准中找到的解释,我无法解释。
对于每一种有符号整数类型,都存在对应的(但不同的)无符号整数类型:“unsigned char”、“unsigned short int”、“unsigned int”和“unsigned long int”,每一种都占用相同的数量存储空间,并且与相应的有符号整数类型具有相同的对齐要求 (3.9) 40) ;也就是说,每个有符号整数类型都具有与其对应的无符号整数类型相同的对象表示。有符号整数类型的非负值范围是对应无符号整数类型的子范围,每个对应的有符号/无符号类型的值表示应相同。
4 声明为无符号的无符号整数应遵守算术模 2n 的定律,其中 n 是该特定整数大小的值表示中的位数
40) 关于类型和指定它们的类型说明符序列之间的对应关系,请参见 7.1.5.2。
41) 这意味着无符号算术不会溢出,因为不能由得到的无符号整数类型表示的结果以比得到的无符号整数类型可以表示的最大值大一的数字为模减少。