为什么C语言中short int 范围是-32768---32767 而不是 -(2^16-1)---32767?

不是可以为“1111111111111111”(16个1)吗?第一个是不是要算入的?即“1*10^15”... 不是可以为“1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1”(16个1)吗?第一个是不是要算入的?即“1*10^15” 展开
 我来答
听不清啊
高粉答主

2015-09-19 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
因为C语言中short int占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767,它的0可以表示为二种状态,+0和-0,既浪费了存储资源,又造成了不方便(需要处理后才能判断二个整数量是否真的不相等)。所以一般采用计算机中一般都采用补码形式来表示有符号整数。多出的一个状态按补码的规则正好是-32768。

-(2^16-1)---32767总的状态数远远大于2^16种,所以不能用16位的二进制来表示的。
大仙志4985
2011-10-05 · TA获得超过6.9万个赞
知道大有可为答主
回答量:2.7万
采纳率:0%
帮助的人:3679万
展开全部
short int 是16Bit Int
是有号数
2补数取负值 (反相加1) *-1
0x0000(0) == 0xFFFF + 1 =-(0x10000) => 0
0x0001(1) == 0xFFFE + 1 =-(0xFFFF) => -(-1) => 1
0xFFFF(-1) == 0x0000 + 1 =-(0x0001) => -1
-100赋值
100 =>0x0064 =Inv=>0xFF9B
-100==>0xFF9B+1 =0xFF9C ==>65436
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
952060690
2011-10-05 · TA获得超过115个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:76.4万
展开全部
首位是要代表正负的 所以。。。。。32767=2^16-1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
20110654
2011-10-05
知道答主
回答量:8
采纳率:0%
帮助的人:8.9万
展开全部
第一个是符号位,正数是0负数是1.
追问
请问,如果将-100赋值给一个无符号的变量,会得到一个什么样的数?是怎么得到的?
-100在内存中占多少bit?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式