码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-27 19:51:31      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

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

 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,然后就比较大小以及求它们的差,很简单,对吧?对结果想必心里都有底了,但我们还是运行一下程序,印证我们的答案吧。

技术分享

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

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

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


 

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

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

标签:

原文地址:http://www.cnblogs.com/IamTing/p/4604518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!