为什么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”
展开
4个回答
展开全部
因为C语言中short int占2个字节,有16个二进制位,共可表示2^16种状态。因为它用来表示有符号数,而0也要占用一个状态。所以,16位的原码可以表示的数是-32767~+32767,它的0可以表示为二种状态,+0和-0,既浪费了存储资源,又造成了不方便(需要处理后才能判断二个整数量是否真的不相等)。所以一般采用计算机中一般都采用补码形式来表示有符号整数。多出的一个状态按补码的规则正好是-32768。
-(2^16-1)---32767总的状态数远远大于2^16种,所以不能用16位的二进制来表示的。
-(2^16-1)---32767总的状态数远远大于2^16种,所以不能用16位的二进制来表示的。
展开全部
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
是有号数
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首位是要代表正负的 所以。。。。。32767=2^16-1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个是符号位,正数是0负数是1.
追问
请问,如果将-100赋值给一个无符号的变量,会得到一个什么样的数?是怎么得到的?
-100在内存中占多少bit?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询