- #include<stdio.h>
- void putBinary(int);
- int main()
- {
- unsigned int a=-10;
- signed int b = -10;
- putBinary( b);
- printf("%u\n",b);
- putBinary(b);
- return 0;
- }
- void putBinary(int n)
- {
- int bits = sizeof(n) * 8;
- while (bits-->0) {
- printf("%d", n>>bits&1);
- if (bits%4==0) printf(" ");
- }
- printf("\n");
- }
复制代码
楼主 可以 看看 实际上 这个 变量 b 的值是没有变的
当 你 printf("%d\n", b); 时 最高位的 1 是 符号位 代表 符号
1111 1111 1111 1111 1111 1111 1111 0110
是 变量 b 是 负十 在内存中的表现形式
当你 printf("%u\n", b); 时 最高位 不是符号位 代表 2的31次方 实际值 是 2147483648
2147483648 在内存中是
1000 0000 0000 0000 0000 0000 0000 0000
2147483648 再减一 就是 2147483647 在内存中是
0111 1111 1111 1111 1111 1111 1111 1111 这样存储的
2147483647 减 9 的值在内存中的表现形式是
0111 1111 1111 1111 1111 1111 1111 0110 这个值 是 2147483638
2147483638 + 2147483648 = 4294967286
所以 4294967286 在 内存中 是 下面的表现形式
1111 1111 1111 1111 1111 1111 1111 0110
下图是 上面的代码的 执行结果
|
|