采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
print((-100)&0x7fffffff) #7个f 0x7fffffff为15个1 输出:2147483548 print((-100)&0x7fffffffffffffff) #15个f 0x7fffffffffffffff为63个1 输出:9223372036854775708
这个按位与的话,不应该是把-100的符号位去掉,只保留数值部分吗? 为什么这么输出不是正的100呢
这是一个很好的问题,不过可能很多同学可能还不理解同学的疑问,这里先做展开,再回答为什么。
print((-100)&0x7fffffff) 这是一个Python语句,意思是将两个数字进行按位与运算,再输出十进制结果,下面一行也是一样的意思。
同学的问题是,与运算为什么没有把-100的符号位给覆盖掉。
首先与运算一般很少使用负数进行与运算的
与运算其实是使用补码进行运算的,这也是为什么得到的结果是这么大的结果
为什么符号位去掉了,因为是使用补码进行运算的,自然就都是正数了。
非常感谢!
老师,假如计算(-7)&0b10111,这个-7的补码是按(10111)的补码11001算,还是按(1111)的补码1001算呢?具体这个补码和0b10111按位与时,得到的结果应该是0b10001,这里的符号位该怎么看呢?为啥不是-1而是17呢?
老师请问这个是从哪一个课教的?我好像没学到这个
登录后可查看更多问答,登录/注册
编程之前先学这门课,系统补足计算机基础知识,夯实编程地基
3.4k 17
1.7k 14
1.2k 13
1.3k 11