整型与无符号整型 运算时,系统会把整型转换为无符号整型
然后再进行运算,如果整型为负,则把负数的二进制补码直接
当成无符号的整型参加运算(即把符号位化为了最高值位。如:
-1的二进制补码为1111 1110,转换为无符号整型的话就是
1111 1110,转换为十进制就是254,然后用254进行运算)。
printf("在mac 64位有符号的int 占%lu 字节\n",sizeof(int));
printf("无符号的unsigned int 占%lu 字节\n",sizeof(unsigned int));//mac 64位
unsigned int a=6;
int b=-16;
unsigned int c=a+b;//在运算时把int型的变量强制转换为unsigned的,然后再相加
printf("a=%u b=%d c=%u\n",a,b,c);
printf("(unsigned int )a = %u\n",(unsigned int)b);//把整型b强制转换为无符号型的
a=16;
b=-16;
c=a+b;
printf("a=%u b=%d c=%u\n",a,b,c);
// 2^32-1=4294967295
// unsigned int 0~4294967295
// 1000 0000 0000 0000 0000 0000 0001 0000//-16原码
// 1111 1111 1111 1111 1111 1111 1110 1111//-16反码
// 1111 1111 1111 1111 1111 1111 1111 0000//-16补码4294967280
输出:
在mac 64位有符号的int 占4 字节
无符号的unsigned int 占4 字节
a=6 b=-16 c=4294967286
(unsigned int )a = 4294967280
a=16 b=-16 c=0