
c++的简单小问题 (unsigned)-1等于多少 怎么算的
4个回答
展开全部
我以前也没怎么搞明白,顺便自己研究了下,大家共同进步哈!
(int占4字节的情况计算出得结果是一样的)
1.方法
先转换成对应的2进制(int型在计算机中是4字节,这里以2字节位例,具体占自己数看计算机)
2.具体步骤
00000000 00001101(13对应的2进制)
11111111 11110010 (取反)
11111111 11001000 (左移2位,这个是计算机中存储的真实内容)
3.关于计算机的存储(补码):
在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
因为上述结果首位为1,所以是个负数。他的原码(即真实值)是首位不变,其他位取反再加1
取反:
10000000 00110111
加1:
10000000 00111000(左边1是符号位,1表示为负,111000转换成10进制就是-56)
所以答案是-56
(我觉得补码的原因,因为有符号位。1000 和0000那是表示+0和-0,计算时会引起混乱)
(int占4字节的情况计算出得结果是一样的)
1.方法
先转换成对应的2进制(int型在计算机中是4字节,这里以2字节位例,具体占自己数看计算机)
2.具体步骤
00000000 00001101(13对应的2进制)
11111111 11110010 (取反)
11111111 11001000 (左移2位,这个是计算机中存储的真实内容)
3.关于计算机的存储(补码):
在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。
因为上述结果首位为1,所以是个负数。他的原码(即真实值)是首位不变,其他位取反再加1
取反:
10000000 00110111
加1:
10000000 00111000(左边1是符号位,1表示为负,111000转换成10进制就是-56)
所以答案是-56
(我觉得补码的原因,因为有符号位。1000 和0000那是表示+0和-0,计算时会引起混乱)
参考资料: 百度一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-1是有符号数,默认使用补码,二进制表示为32个1。如果强制解释为无符号数,那么就是2^0+2^1+2^2+....+2^31=2^32-1=4294967295
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
10000000 00000000 00000000 00000001
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询