永发信息网

c语言: 为什么会输出65535?

答案:3  悬赏:50  手机版
解决时间 2021-03-05 15:18
c语言: 为什么会输出65535?
最佳答案
因为你把a定义成了unsigned short 类型,-1的补码是1111111111111111,把-1赋值给a,而a又因为是unsigned short 类型,从而不能存放负数,所以此时最高位的一不在表示负号,而是代表数值,所以就变成了65535,如果你把a定义为int类型,就会输出-1,注意,在赋值过程中应该避免将一个负数赋给unsigned 的类型。追问那65535是怎么来的?追答详解如下:
首先,不论short类型,还是unsigned short类型的变量,其存储的数值都是以补码的形式存储的,如果数值占两个字节,就有16位二进制位。
其次,应该了解二进制数码的知识,这里详细解释一下,二进制数码分为原码,反码,补码,
例如十进制数1如果用两个字节存储的话,其二进制原码为0000000000000001,注意最高位是0表示正数,最高位是1表示负数,所以-1的二进制原码为1000000000000001。正数的反码,补码与其原码是相同的,所以1的反码和补码都是0000000000000001。但是负数的反码应该是这样的,保持其最高位不变(因为最高位是符号位),其他位按位取反,因此-1的反码是11111111111111110,而负数的补码是在其反码的基础上加1,因此-1的补码是11111111111111111.
最后,我们知道short类型可以存储带符号的数,就是说可以存储正负数,而unsigned short类型只能存放正数,当把-1赋给一个unsigned short类型的变量时,也就是把其补码1111111111111111赋给了该变量,由于对于unsigned short类型来说,数值的最高位不再用来表示符号,而是用来表示数值,故把1111111111111111当作一个纯粹的无符号二进制数,你可以将1111111111111111转换一下,它就是十进制数65535。如果你把-1赋给了short类型就会正常输出-1.
特别申明一下,在以后编程的时候,切记不要把一个负数赋给unsigned类型的变量。因为unsigned类型的变量只能用来存放正数。现在思路清晰了吗?
全部回答
由楼主疑惑可知:楼主使用的是16位的编译器,short int和int的位数一样

1. 显示输出为%u(无符号整形);声明变量a时是unsigned short 无符号短整型,数值范围是0~65535
2. 变量b为整形,短整型一样,长度也是16位,数值范围是-32768~32767
3. b=-1,在内存中将以补码的形式存储,最高位为符号位(=1,代表负数),其余15位(000 0000 0000 0001)取反后(有源码吗,看看
有符号数 与 无符号数 , %u表示以无符号显示。
有符号数采用补码,
短整数 -1 就是 用 65535 表示 -1的,这就是补码。
所以, 短整数 -1 跟 无符号数 65535 内部是完全一样的。
你要了解“补码”的概念就明白了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
查看到什么地方能知道乘几路公交车在唯亭到苏
承天运商店在什么地方啊,我要过去处理事情
诗歌表现手法有几种
大众polo四眼有几个发动机支架
顺发美容美发毛巾直销部我想知道这个在什么地
问道手游好友摆的东西怎么看不到呢?
胆囊在生物学中有什么作用
【爱迪生与手机】爱迪生与手机作文
作善之人降吉祥 营谋生意好时光 财源滚滚都如
今天一大早打开门一条大黑狗在门口,我想知道
去福建福州当步兵好还是去兰州当炮兵好啊
富达大厦地址在哪,我要去那里办事
圆柱的体积比与它等底等高圆锥的体积多3分之2
pvc排水管有毒吗
【河南交警】您已成功预约商丘支队考练中心科
推荐资讯
几年前央视一套放过的战争片
同学们做了25面黄旗,做的红旗比黄旗多20%,
数码相机上的录像视频在相机上可以播放,把内
天见证近义词
天下手游的新职业太虚怎么加点好啊?
好运来营养快餐地址在什么地方,想过去办事
易语言怎么把编辑框里面的特定字符变成日期时
天津标致207后桥是免费更换吗?有谁知道吗?
如图是微生物平板划线示意图。划线的顺序为12
重庆明辉格力电器销售有限公司跟格力重庆分公
将下列的相关项目用直线连接起来: 省区简称
武昌区武汉科凡定制(青山专卖店)这个地址怎么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?