二进制取反问题
我想问下取反是一定会得到一个负数吗?视频中说是以取反后的二进制数的左边第一个数是0还是1为依据判断是否为正或负数,但我用28即11100取反后应为00011这时不是应该是个正数吗?应该就为3啊,但是是得到了-29,所以想问下取反后左边第一个数为0时,怎么算呢?
21
收起
正在回答
2回答
建议了解下计算机的原码,反码,和补码概念以及负数的二进制表示方法,了解后,将会很好理解这个问题。
位是数据存储的最小单位,其中8 bit 就称为一个字节(Byte)。计算机中的CPU位数指的是CPU一次能处理的最大位数。所以28转化后为0001 1100
在计算机系统中,数值一律用补码来表示和存储。正数的补码和原码一样,负数则比较复杂:
原码:为十进制绝对值转化为二进制后最高位取1
反码:原码的最高位不变,其他位数取反
补码:反码加1
那么: 补码 = - (原码+1),按顺序理解为:
0001 1100(28的二进制)
取反后1110 0011(现在为补码)
1001 1100 (转为反码)
1001 1101(要求的原码,转为二进制即为-29)
1.Python零基础入门
- 参与学习 人
- 提交作业 2727 份
- 解答问题 8160 个
想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星