二进制取反问题

二进制取反问题

我想问下取反是一定会得到一个负数吗?视频中说是以取反后的二进制数的左边第一个数是0还是1为依据判断是否为正或负数,但我用28即11100取反后应为00011这时不是应该是个正数吗?应该就为3啊,但是是得到了-29,所以想问下取反后左边第一个数为0时,怎么算呢?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

建议了解下计算机的原码,反码,和补码概念以及负数的二进制表示方法,了解后,将会很好理解这个问题。

  1.  位是数据存储的最小单位,其中8 bit 就称为一个字节(Byte)。计算机中的CPU位数指的是CPU一次能处理的最大位数。所以28转化后为0001 1100

  2. 在计算机系统中,数值一律用补码来表示和存储。正数的补码和原码一样,负数则比较复杂:

    原码:为十进制绝对值转化为二进制后最高位取1

    反码:原码的最高位不变,其他位数取反

    补码:反码加1

    那么: 补码 = - (原码+1),按顺序理解为:

              0001 1100(28的二进制)

    取反后1110 0011(现在为补码)

              1001 1100  (转为反码)

              1001 1101(要求的原码,转为二进制即为-29)

好帮手乔木 2020-02-17 19:05:41

同学你好:

python的位运算符是基于其数值化为二进制的0或1,通常1字节后再进行的运算,1字节为八位二进制。

所以28的二进制为00011100

取反                     11100011

符号位为1,表示负数,负数是以补码存储的,需要转换为原码,因此除去符号位需要再取反加1。

除去取反              10011100

加一                     10011101

--------------------------------------

                            -           29

如果我解决了同学的问题,请采纳!学习愉快^_^。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师