关于二进制取反的问题

关于二进制取反的问题

老师您好,您在 另一个提问 中的回答,我有几个疑问:

1. 您第一行说到“几乎不存在左移时高位舍弃的情况”,几乎的意思是指还是会有要舍弃的时候么? 第二行也写到了左移高位舍弃,这里感觉有点矛盾啊;

2. 例子中a = 12(1100),左移后是00000011 = 3,后面两位的0舍弃,并且您提到了a>>2 = 3,3<<2之后还要等于a,那么如果a>>3的话,低位舍弃后得到的是00000001,这个值再左移3位的话就变成了00001000,和a不相等了啊,这个和您说的“a的值是不能因位运算而改变的,如a>>2之后为3,3<<2的值要与a相等”的情况也是相矛盾的,又该怎么理解呢?

3. 课件中,老师说到“在二进制当中,要表达一个负数的话,它左侧第一位一定是1”,那么11000011这个二进制数字实际上表达的意思就是-1000011么?如果是的话,那么195在二进制中要怎么表示?还有这个左侧第一位怎么定义?是不是111这个二进制也不是十进制的7,而是十进制的-3(二进制-11)?

正在回答 回答被采纳积分+1

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

5回答
mikuyo 2019-07-19 19:38:48

Python Doc 对左移操作符的说明:

A right shift by n bits is defined as division by pow(2,n). A left shift by n bits is defined as multiplication with pow(2,n);

for plain integers there is no overflow check so in that case the operation drops bits and flips the sign if the result is not less than pow(2,31) in absolute value. Negative shift counts raise aValueError exception.

(译文:右移n位可以定义为除以pow(2,n),左移n位可以定义为乘以pow(2,n);对于普通整数是没有溢出检查的,因此若结果的绝对值不小于pow(2,31), 这个运算会截掉相应的位并且符号位也在移位处理之列. )

所以当右移的时候便是在进行 /2**n 运算,然后结果为得到的整数,而取模的数码便是二进制中向右移动所补的0

同理向左移动便是乘以2** ,因为理论上我们所取的数不是无限的,所以不会用舍弃高位,所以直接补0便可。

以上仅为本人通过资料查询自己的思考,如果有错的地方,希望老师指正

提问者 洛维西 2019-05-05 18:06:50

emmm第三个问题不是问取反的,只是我对于“在二进制当中,要表达一个负数的话,它左侧第一位一定是1”这句话不理解,不明白左侧第一位是1的二进制数什么时候是正数什么时候是负数。


还有这是啥情况,没法回复啊

http://img1.sycdn.imooc.com//climg/5cceb5b5000155f914161042.jpg

  • 同学,你好,二进制的问题:我们在编写代码时写入的是十进制,计算机只能识别0、1的数字,如果您输入的是正数则计算机识别为0、1组成的二进制时,左侧第一位为0,如果你输入的是负数识别为0、1组成的二进制时,则左侧第一位为1. 如果我的回答解决了你的疑惑,欢迎采纳!!^_^ 祝学习愉快~~~~~
    2019-05-07 18:35:32
慕猿梦 2019-05-05 16:43:02

同学,你好,

问题1:Python3中int类型的长度理论支持无限大的数字,咱们平常项目中几乎使用不到无限大的数字,所以几乎不存在左移时高位舍弃的情况。

问题2:左右移值相等,前提是无论左移还是右移舍位时舍去的值中不能包含1。

问题3:a=60是一个正数,数学规则对正数取反得到一个负数,二进制也遵循这个规则,对a进行取反,为11000011=195,当取反后二进制左侧第一位为1表示这个数是个负数,之后通过二进制取反规则,得到-(该二进制再次取反+1)的到-(~11000011+1)=-61

如果我的回答解决了你的疑惑,欢迎采纳!!^_^ 祝学习愉快~~~~~

  • 提问者 洛维西 #1
    emmm第三个问题不是问取反的,只是我对于“在二进制当中,要表达一个负数的话,它左侧第一位一定是1”这句话不理解,不明白左侧第一位是1的二进制数什么时候是正数什么时候是负数。
    2019-05-07 18:19:31
提问者 洛维西 2019-05-05 16:22:07

???回答呢?

http://img1.sycdn.imooc.com//climg/5cce9d21000133bd08130161.jpg

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

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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