关于-128的原码(2进制)

2进制的原码是取他的绝对值再转换成2进制吧,那么-128的绝对128化成2进制就是00000000吗?反码就是11111111.那么11111111+1=多少?... 2进制的原码是取他的绝对值再转换成2进制吧,那么-128的绝对128化成2进制就是00000000吗?反码就是11111111.那么11111111+1=多少? 展开
 我来答
Fenggz
2006-10-05 · TA获得超过2427个赞
知道小有建树答主
回答量:709
采纳率:0%
帮助的人:937万
展开全部
-128,绝对值128,有符号数值范围是-127到+127,所以128的二进位是要用2字节内存保存,即16位,所以128的二进制码是(中括号只是表示一个字节)
[00000000][10000000]

以上是+128的原码,同时也是+128的补码

-128就是要+128的原码全部取反再加1:
+128的原码:[00000000][10000000]
取反就得到:[11111111][01111111]
再加1得到了:[11111111][10000000],这就是128的补码

*补码是数据在内存的储存形式
要求-128的原码,只需把+128的原码的最高位(符号位)更改就可:
+128的原码:[00000000][10000000]
-128的原码:[10000000][10000000]

*由码码求补码:除符号位外,其它全取反再加1
*所以,求负数的二进制补码至少有上述两种:
1.取绝对值,求绝对值二进码,全部取反再加一
2.取绝对值,求绝对值二进码,最高位改为1,除符号位外其它取反再加1

当然,如果保存-128的变量是4字节的,按上面方法可得到
-128原码[10000000][00000000][0000000][10000000]
-128补码[11111111][11111111][1111111][10000000]
------------------------
补充:
8位二制码[10000000]的10进制值,如果储存它的变量是无符号类型,则取值是128
但如果按有符号来读取,则是-126
计算如下:[由补码求原码值]
补码:[10000000]
除符号位全取反得[11111111]
减1得到原码[11111110],这是-126的原码

所以,如果变量是 有符号short integer(短整型类,C语言中有),这个类型的变量取值范围是 -127到+127
则127+1不会等于128,而是-126:
[0111111]+[0000001]=[1000000](-126的补码)
但是,如果它是无符号short integer,则它的范围是0到255,127+1=128:
[0111111]+[0000001]=[1000000](正数128的8位2进制补码)
同理,
[1111111]按无符号short integer读取是255,按有符号shortinteger则是 -1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式