C/C++ 有符号数和无符号数

在开始话题前,不妨先来看看以下这段代码

1 #include <iostream>
 2 #include <stdio.h>
 3 
 4 int main() {
 5     int a = -1;
 6     unsigned int b = 1;
 7     std::cout << "a > b is " << (a > b) << std::endl;
 8     std::cout << "a - b = " << (a - b) << std::endl;
 9     return 0;
10 }

其实这段代码的目的很简单,就是给有符号变量a赋值为-1,给无符号变量b赋值为1,然后就比较大小以及求它们的差,很简单,对吧?对结果想必心里都有底了,但我们还是运行一下程序,印证我们的答案吧。

C/C++ 有符号数和无符号数

如果输出结果和你心中的答案一样,那下面的内容就可以不用看了,如果不一样,那就看看吧。

首先,当有符号数和无符号数一起运算时,所有数都会自动转换为无符号数。在计算机中,数值都是以补码的形式存在,对于-1来说,其在32位机器中表示为ffff_ffff,最高位为1,代表其是一个负数。当其转变为无符号数时,最高位不再代表正负,而是代表数值了。十六进制的无符号数ffff_ffff在十进制中是4294967295,也就是说转换为无符号数后,a=4294967295,而b=1,由此就可以理解为什么上述代码会得出这样的结果了。

另外,对于浮点数来说,不存在无符号这一说法,浮点数都是有符号的,不存在有符号数向无符号数转换的问题。


参考:有符号数和无符号数间的比较


原文链接: https://www.cnblogs.com/IamTing/p/4604518.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/218246

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午10:08
下一篇 2023年2月13日 上午10:08

相关推荐