博客
关于我
20210410-python-关于原码反码和补码
阅读量:658 次
发布时间:2019-03-15

本文共 753 字,大约阅读时间需要 2 分钟。

关于反码和补码的含义和计算什么的,每次记了就忘。。。

这次专门查了下反码和补码的背景和应用。
记录一下。

1、背景

众所周知,计算机语言是使用二进制来表达的。
数字是用n位二进制数来表示的,则数字的运算实质为二进制的运算。
但二进制只能做加法,所谓的减法实质上是加上这个数的负数。
如 4-2 = 4+(-2)
二进制规定最高位表示数的正负,0为正,1为负,但这个标识无法直接用于运算(需要引入特殊机制,会导致运算成本太高),比如:
4-2用标识直接运算变成 0000 0100 + 1000 0010 = 1000 0110 = -6(十进制)

所以就引入了反码,计算如下:

4-2 (十进制) = 0000 0100 + 1111 1001 = 1000 0010(最高位溢出的补在最低位) = 2(十进制)
但反码有明显的问题:
1、0000 和 1111 都能代表0 (-0=1000 0000 反码:1111 1111 )
2、最高位溢出时需要特殊处理,影响处理效率

于是有了补码,计算如下

4-2 (十进制) = 0000 0100 + 1111 1010 = 1000 0010(最高位溢出直接丢弃)= 2(十进制)

2、基础计算

反码
正数的反码=原码本身
负数的反码=原码的各位取反(注意:符号位不变)
如 0001 0100
反码 1110 1011

补码

正数的补码=原码本身
负数的补码=原码的各位取反+1(注意:符号位不变)
如 0011 1010
补码 1100 0110

3、python应用

十进制转二进制

>>> a=bin(10)>>> print(a)

结果:0b1010

二进制转十进制

>>> b=int(0b1001100)>>> print(b)

结果: 76

转载地址:http://aspmz.baihongyu.com/

你可能感兴趣的文章
mysql备份工具xtrabackup
查看>>
mysql备份恢复出错_尝试备份/恢复mysql数据库时出错
查看>>
mysql复制内容到一张新表
查看>>
mysql复制表结构和数据
查看>>
mysql复杂查询,优质题目
查看>>
MySQL外键约束
查看>>
MySQL多表关联on和where速度对比实测谁更快
查看>>
MySQL多表左右连接查询
查看>>
mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
查看>>
mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
查看>>
mysql如何删除数据表,被关联的数据表如何删除呢
查看>>
MySQL如何实现ACID ?
查看>>
mysql如何记录数据库响应时间
查看>>
MySQL子查询
查看>>
Mysql字段、索引操作
查看>>
mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
查看>>
mysql字段类型不一致导致的索引失效
查看>>
mysql字段类型介绍
查看>>
mysql字段解析逗号分割_MySQL逗号分割字段的行列转换技巧
查看>>
MySQL字符集与排序规则
查看>>