python & 0xFFFFFFFF打印输出负数的补码[通俗易懂]
2023-06-13 09:11:38 时间
大家好,又见面了,我是你们的朋友全栈君。
-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位。 总结:
- python内部运算都是补码进行的,如要得到-7的补码打印输出,就要与0xFF相与,就是-7的补码形式各位上都和1与运算,1仍为1,0相与后则为0,得出的结果就是-7的补码。
但在后面第2条的“以人为方便”的逻辑下,python将得到-7的补码结果作为原码表示得到了另一个数249准确地说,经过和0xFF与运算后得到了一个新的数249(与0xFF…相与必定为非负数),刚好它的原码表示与-7的补码相同; - 在程序编写过程中,无论是打印整形数值的二进制表示和用二进制表示的数输入如“print(0b11111001)”都是这样的逻辑:都以人为方便的方式为出发点,就二进制数值而言输入和输出都为无符号原码(非负数)表示为默认逻辑,若要输出负数,人只要前面加负号,如print(-0b11111001),结果为-249;
- 我的理解:与0xFF相与,编写的0xFF默认也是无符号原码,运算时0xFF原码与补码相同,以补码运算后得到的结果补码为正数的补码,原码补码相同,输出补码转换后的原码是跟补码一样的,如下-0xFF的情况:(0xFF一样,感觉最终的结果的正负跟着0xFF走)
a = -7
b = a & -0xFF
print(bin(b))
# 输出
-0b11111111
# 过程
-7 的补码: 1111 1001 (8位)
-0xFF的补码:1000 0001 (8位)
1, 1 1 1 1 0 0 1
1, 0 0 0 0 0 0 0 &
————————————————
1, 0 0 0 0 0 0 0 ---结果补码形式
输出以无符号原码输出
补码转原码,符号位不变,负数则数值取反加一,这里取反加一有进位所以最终的表示为
1,1 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″。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145549.html原文链接:https://javaforall.cn
相关文章
- 分类变量的卡方检验(python实现&SPSS实现)「建议收藏」
- Python获取时间戳_python爬虫时间戳
- Pycharm和Anaconda的python版本问题
- python 遍历文件夹下所有图片
- python的进制转换器,Python进制转换[通俗易懂]
- Python&R语言-python和r相遇
- 符合python命名规范的标识符是什么_Python标识符命名规范
- python常见运维脚本_Python运维常用脚本[通俗易懂]
- 迭代器Python_python进阶路线
- 【说站】python中__call__的触发执行
- Python修改文件后缀_python重命名文件名
- python读取pkl_Python读取文件的一段内容
- python分析人口出生率代码_国家统计局居然也能用的上Python?人口数据Python脚本了解一下?…[通俗易懂]
- python调用通达信公式_通达信公式-主力雷达Python化[通俗易懂]
- 在python中用来安装第三方库的常用工具_什么库用于安装管理Python扩展包
- python lambda表达式举例_Python中lambda表达式[通俗易懂]
- python win32api教程_解放双手——python win32api 入门「建议收藏」
- 廖雪峰的 Python 教程_python基础教程廖雪pdf
- python实现GUI自动化(控制鼠标)|屏幕快照&图像识别基础
- python-Python与PostgreSQL数据库-PostgreSQL数据库的基本知识(二)
- Python-PostgreSQL的使用详解数据库
- Python网络编程——学习笔记详解编程语言
- Python学习:7.文件操作详解编程语言
- Python中识别DataFrame中的nan详解编程语言
- 在Linux上搭建Python开发环境(linux搭建python环境)
- 在Linux系统中使用Python编程语言(linux中python)
- Linux下从系统卸载Python(linux下卸载python)