原码补码反码
说原码补码反码之前,先讲一下机器值和真值。
原码补码反码都是二进制(讲位运算时提到了)机器值,机器值就是最前一位是符号位(负数为1,正数为0),其余是正常的绝对值的二进制,例如 :在八位时,3(00000011),-3(10000011);真值就是真正的二进制值,例如:在八位时,3(00000011),-3(-00000011)。
对于正数,原码反码补码都是一样的。例如:1=源码(00000001)=反码(00000001)=补码(00000001)。
所以重点讲一下负数 ,源码就是最前一位是1,其余是正常的绝对值的二进制,例如:-1=源码(10000001)。反码就是在源码的基础上除符号位不变外,其余0变1,1变0,例如:-1=源码(10000001)=反码(11111110)。补码就是在反码的基础上加1,例如:-1=源码(10000001)=反码(11111110)=补码(11111111)。
反码和补码的出现是为了计算机更便捷的运算(指减法)。例如:1-1=1+(-1)=(源码(00000001)+源码(10000001)=源码(10000010)=-2(这里是错误的))=反码(00000001)+反码(11111110)=反码(11111111)=源码(10000000)=-0=补码(00000001)+补码(11111111)=补码(00000000)=0(补码是为了补充反码的缺陷(-0)而产生的))。
借讲原码反码补码的随笔,顺便补一下取反运算,取反运算是在补码下进行的,1变0,0变1(包括符号位(注意和反码的区别)),例如:~12=~补码(01100)=补码(10011)=反码(10010)=源码(11101)=-13。