原码、反码、补码知识整理
在计算机中机器是识别不了正数(+)、负数(-)的,所以早期给计算机设定了0代表正数,-1代表负数,称为符号位,置于最前面
1.原码
正数转换为二进制位,二进制位就是这个正数的原码
负数取绝对值转换为二进制位,二进制位在最高位补1就是这个负数的原码
eg:int(3)的原码为多少?
解析
3转换为二进制位为:11B,在32位机器上占4个字节,补零
正数:00000000 00000000 00000000 00000011
-3取绝对值后转换为二进制位为:11B,在32位机器上占4个字节,在最高位补1
负数:10000000 00000000 00000000 00000011
缺点:零分为+0和-0,当我们在进行不同符号的加法运算或者同符号的减法运算时,不能直接进行加减运算,不能直接给出结果的正负,需要先取绝对值后再进行加减操作,符号位由绝对值大的决定,所以反码就问世了,反码算是原码的一种改进
2.反码
正数的反码跟原码相同,这里不作过多介绍,我们重点来了解一下负数的反码
负数的反码为在原码的基础上,除符号位外所有位取反,即1变0,0变1
eg:int(3)的原码为多少?
解析
3转换为二进制位为:11B,在32位机器上占4个字节,补零
正数:00000000 00000000 00000000 00000011
-3取绝对值后转换为二进制位为:11B,在32位机器上占4个字节,在最高位补1,除符号位外所有位取反
原码:10000000 00000000 00000000 00000011
反码:11111111 11111111 11111111 11111100
缺点:反码解决了加减运算的操作问题,但仍没有解决0的正负之分,所以补码问世了
3.补码
正数的补码跟原码相同,这里也不作过多的介绍,还是来重点了解一下负数的补码吧,
负数的补码为在原码基础上,除符号位外所有位取反(得到反码),最后在最低位+1
eg:int(3)的原码为多少?
解析
3转换为二进制位为:11B,在32位机器上占4个字节,补零
正数:00000000 00000000 00000000 00000011
-3取绝对值后转换为二进制位为:11B,在32位机器上占4个字节,在最高位补1,除符号位外所有位取反
原码:10000000 00000000 00000000 00000011
补码:11111111 11111111 11111111 11111101
也可以说在负数的反码基础上在最低位+1即为负数的补码
总结:
1.正数的反码和补码与原码相同
2.负数的反码为这个数的原码除符号位外所有位取反
3.负数的补码为这个数的原码除符号位外所有位取反(即得到反码),然后在最后一位加1
优缺点:
原码中执行加减法运算操作时很困难,也没解决正负零的区分
反码作为原码的改进,虽然解决了加减法运算操作的问题,但仍没有解决正负零
补码在针对加减运算和正负零的问题上都解决了,平时用的最多的也就是补码
---------------------
作者:zhouym_
来源:CSDN
原文:https://blog.csdn.net/zhouym_/article/details/88364630
版权声明:本文为博主原创文章,转载请附上博文链接!