【原创】为什么C语言 -1 强转为无符号整数后是4294967295?【32位机器】
问题背景:
熟悉的代码会得到如题示的结果: printf("%u\n", (size_t)-1);
预备知识:
http://www.blogdaren.com/post-2615.html
解决方案:
0X01、整数1的二进制如下:
000000000000000000000000000000010X02、由于-1是负数,所以二进制的第一位需要取值为1即代表符号位,结果得到原码:
100000000000000000000000000000010X03、继续取其反码得到:
111111111111111111111111111111100X04、继续取其补码得到:
111111111111111111111111111111110X05、将最后得到的补码转换成无符号十进制数正好就是:
2^32 - 1 = 4294967295
版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。