【原创】为什么C语言 -1 强转为无符号整数后是4294967295?【32位机器】

blogdaren 2021-01-20 抢沙发 80人次

问题背景:

熟悉的代码会得到如题示的结果: printf("%u\n", (size_t)-1);

预备知识:

http://www.blogdaren.com/post-2615.html

解决方案:

0X01、整数1的二进制如下:

00000000000000000000000000000001
0X02、由于-1是负数,所以二进制的第一位需要取值为1即代表符号位,结果得到原码
10000000000000000000000000000001
0X03、继续取其反码得到:
11111111111111111111111111111110
0X04、继续取其补码得到:
11111111111111111111111111111111
0X05、将最后得到的补码转换成无符号十进制数正好就是:
2^32 - 1 = 4294967295

版权声明:除非注明,本文由( blogdaren )原创,转载请保留文章出处。

本文链接:【原创】为什么C语言 -1 强转为无符号整数后是4294967295?【32位机器】

发表评论:

您的昵称:
电子邮件:
个人主页:

Free Web Hosting