CGLib动态代理 Gitlab Markdown编辑器 iphone windows delphi constructor jboss grep 郑州网站开发 iot系统 cad怎么重复上一次命令 idea整理代码 hadoop环境变量配置 cmd清空命令 python迭代 python指令 python命令大全 java案例 圣骑士装备 高效能人士的七个习惯pdf vnc客户端 python游戏代码 cmd代码 dota改键工具 隐藏进程 语音分析软件 华为动态照片 rpm卸载命令 密码翻译 pro换肤 逗号的作用 win98序列号 flushdns 通灵学院在哪 西门子触摸屏编程软件 a1474 脚本文件 dnf女柔道加点 kz文件怎么打开
当前位置: 首页 > 学习教程  > python

python 0xFFFFFFFF打印输出负数的补码

2021/2/6 22:21:41 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

-7的有符号原码和补码表示 -7的原码:0b1000 0111 (8位)-7的补码:0b1111 1001 (8位) python中的输出 a -7 print(bin(a))# 输出 -0b111python直观地打印输出了带负号的原码显示 为了能够打印输出对应的补码表示进行如下运算&am…

-7的有符号原码和补码表示

  • -7的原码:0b1000 0111 (8位)
  • -7的补码:0b1111 1001 (8位)

python中的输出

a = -7
print(bin(a))

# 输出
-0b111

python直观地打印输出了带负号的原码显示
为了能够打印输出对应的补码表示进行如下运算:

a = -7
b = a & 0xFF  # -7的补码
print(b)  # 249
print(0b11111001) 
print(bin(b)

# 输出
249  // 249原码0b11111001
249
0b11111001

也就是说与0xFF相与后得到是249的原码表示,不过刚好与-7的补码形式相同
:0xFF是8位,相与得到的结果为8位;0xFFFFFFFF是32位,相与得到的结果则为32位。
总结

  1. python内部运算都是补码进行的,如要得到-7的补码打印输出,就要与0xFF相与,就是-7的补码形式各位上都和1与运算,1仍为1,0相与后则为0,得出的结果就是-7的补码。但在后面第2条的“以人为方便”的逻辑下,python将得到-7的补码结果作为原码表示得到了另一个数249准确地说,经过和0xFF与运算后得到了一个新的数249(与0xFF…相与必定为非负数),刚好它的原码表示与-7的补码相同;
  2. 在程序编写过程中,无论是打印整形数值的二进制表示和用二进制表示的数输入如“print(0b11111001)”都是这样的逻辑:都以人为方便的方式为出发点,就二进制数值而言输入和输出都为无符号原码(非负数)表示为默认逻辑,若要输出负数,人只要前面加负号,如print(-0b11111001),结果为-249;
  3. 我的理解:与0xFF相与,编写的0xFF默认也是无符号原码,运算时0xFF原码与补码相同,以补码运算后得到的结果补码为正数的补码,原码补码相同,输出补码转换后的原码是跟补码一样的,如下-0xFF的情况:(0xFF一样,感觉最终的结果的正负跟着0xFF走)
a = -7
b = a & -0xFF
print(bin(b))

# 输出
-0b11111111

# 过程
-7 的补码: 1111 10018位)
-0xFF的补码:1000 00018位)
1, 1 1 1 1 0 0 1
1, 0 0 0 0 0 0 0   &
————————————————
1, 0 0 0 0 0 0 0   ---结果补码形式
输出以无符号原码输出
补码转原码,符号位不变,负数则数值取反加一,这里取反加一有进位所以最终的表示为
11 1 1 1 1 1 1 1
python bin()输出后则就是结果输出
-0b11111111

如何将得到-7和0xFF相与后的补码正确打印补码对应的十进制输出而不是作为249的原码打印十进制输出

采用取反符号~

a = -7
b = a & 0xFF
print(~b ^ 0xFF)

# 输出
-7

相当于”取反加一“(原码与补码数值位的转换口诀,详见计算机组成原理),再添加负号。过程就是先得到的符合“以人为方便”的逻辑下无符号原码表示0b111,再添加负号得到-0b111,打印得到-7。若a为正整数7最后得到的则是带负号的-7补码"-0b11111001"。


本文链接: http://www.dtmao.cc/news_show_2000027.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?