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

原文章:知乎

原码和二进制类似,不过它有符号位。正数符号位为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]补

相关推荐
small_wh1te_coder5 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
白书宇6 天前
5.从零开始写LINUX内核--从实模式到保护模式的过渡实现
linux·汇编·数据库·开源
浩浩测试一下6 天前
02高级语言逻辑结构到汇编语言之逻辑结构转换 if (...) {...} else {...} 结构
汇编·数据结构·数据库·redis·安全·网络安全·缓存
蚰蜒螟7 天前
JVM安全点轮询汇编函数解析
汇编·jvm·安全
要记得喝水12 天前
汇编中常用寄存器介绍
开发语言·汇编·windows·c#·.net
技术领导力14 天前
华为开源CANN,再次释放“昇腾转向”信号
汇编
DONG91318 天前
Python 中的可迭代、迭代器与生成器——从协议到实现再到最佳实践
开发语言·汇编·数据结构·python·算法·青少年编程·排序算法
embrace9920 天前
【C语言学习】scanf函数
c语言·开发语言·汇编·学习·青少年编程·c#·编辑器
麦兜*21 天前
【算法】十大排序算法超深度解析,从数学原理到汇编级优化,涵盖 15个核心维度
java·汇编·jvm·算法·spring cloud·ai·排序算法
会掉头发21 天前
x86_64汇编
汇编