原码、反码、补码在汇编中的应用

原文章:知乎

原码和二进制类似,不过它有符号位。正数符号位为0,负数为1 。

例:4=0000 0100 ,-4=1000 0100

原码是人脑最容易理解和计算的表示方式。

但是这在计算机中计算就出了问题,这两个(4和-4)的原码相加为1000 1000(-8),这个结果并不对。

于是反码就出现了:

4(反)=0000 0100(正数的反码和原码一样)

-4(反)=1111 1011(负数的反码是将原码中,除符号位以外,每一位取反)

于是4+(-4)=0000 0100(4反)+1111 1011(-4反)=1111 1111(0反)

但是这还有一个问题:0怎么办?0不是正数也不是负数,0的反码怎么办?这就用到补码了。

于是补码的出现,解决了0的符号问题以及0的两个编码问题:

1-1 = 1 + (-1) = 0000 0001原+ 1000 0001原= 0000 0001补+ 1111 1111补= 1 0000 0000补=0000 0000补=0000 0000原注意:进位1不在计算机字长里。

这样0用0000 0000表示,而以前出现问题的-0则不存在了。而且可以用1000 0000表示-128:-128的由来如下:

(-1) + (-127) = 1000 0001原+ 1111 1111原= 1111 1111补+ 1000 0001补= 1000 0000

相关推荐
执迷不悟8233 天前
ARM--汇编指令
汇编·arm开发
Dlrb12114 天前
ARM指令集---汇编指令集的学习与应用:C程序与汇编的相互调用,处理器工作模式的改变等
汇编·arm开发·arm··arm指令集·汇编指令
学逆向的7 天前
汇编——函数
开发语言·汇编·网络安全
学逆向的7 天前
汇编——修改EIP的值
开发语言·汇编·网络安全
学逆向的10 天前
汇编——数据存储模式
开发语言·汇编·网络安全
学逆向的11 天前
汇编——内存
开发语言·汇编·算法·网络安全
学逆向的12 天前
汇编——位运算
开发语言·汇编·算法·网络安全
hai31524754312 天前
九章编译法----空间几何统一编译法
网络·汇编·人工智能·线性代数
想你依然心痛13 天前
自定义RTOS内核:从零实现上下文切换与任务调度——汇编、PendSV
java·开发语言·汇编·pendsv
hai31524754313 天前
九章空间几何对照直译法:通用芯片 / 定制专用芯片 编译适配规则
linux·汇编·bash