计算机基础之--原码,反码,补码

本文介绍了计算机基础知识中的机器数与真值、原码、反码和补码的概念。通过实例展示了正负数在这些表示法下的转换,并解释了补码的重要性,尤其是在计算机中实现加减法运算的过程。文章还提及了在Discuz论坛帖子状态处理中应用这些知识的情况,并建议避免过度依赖单一字段存储多种状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在处理discuz中帖子状态时接触到大学时学过的计算机基础(谁说大学学过的真正工作时不会用到,打脸),在这里记录一下,重新复习下大学的计算机基础。

一:机器数与真值

   众所周知,计算机的世界是二进制的世界,0,1代表万物,我们代表一个数字,同样也是用0,1来组成,比如数字6用二进制表示为 0000 0110,数字有正负区分,所以二进制中最高位用来区分正负,0代表正1代表负,所以1000 0110 代表-6,刚才的举例中0000 0110,1000 0110就是机器数,其中代表机器数真正的数值的6和-6则称为真值。

二:原码

  原码即机器数,例1的原码用8位二进制表示即为 0000 0001,-1的原码用8位二进制表示为 1000 0001

三:反码

  正数的反码是其本身,负数的反码符号位不变,其他各位按位取反

  例:

          1的反码是 0000 0001 

          -1的反码是1111 1110

四:补码

  正数的补码是其本身,负数的补码是符号位不变,其他各位按位取反最后再加1(换个说法就是在反码的基础上+1)

  例:

      1的补码是 0000 0001

     -1的补码是 1111 1111

总结:

正数的原码,反码,补码一样,负数的反码是符号位不变其他各位置按位取反,补码是反码加一。

为什么会出现这些概念???

  相信你对符号位的概念足够清楚的话,会发现计算机中其实只有加法,没有减法(减法的实现依赖符号位)

  例:

  1+1 = 2  0000 0001+000 0001 = 0000 0010 = 2

   1-1 = 0 在计算机中表示为1+(-1)   0000 0001 + 1000 0001 = !!!这个时候你就发现不对了,怎么不是0呢?这个时候就有了反码的存在即 (反码的运算)0000 0001+1111 1110 = 1111 1111,1111 1111的原码是1000 0000 这个时候你会发现虽然是0 但是出现了-0,很奇怪的,紧接着补码出现了,接下来我们使用补码进行1+(-1)的运算   1的补码为本身 0000 0001 -1的补码为 1111 1111 那么 00000001+11111111 = 00000000 补码为0000 0000那其原码也为0000 0000 为0

  再说会到dz中论坛帖子状态的问题,为了用一个字段存储更多的状态,所以会使用机器码来逻辑与,拆分时使用逻辑或来处理,以此判断帖子的状态,可存储多个状态。

  同时说一句,dz这种论坛帖子状态的处理方式太繁琐且在维护角度而言有点得不偿失,建议这块有这么处理的同学及早拆分多个字段,按照不同维度去拆分状态字段生成多个字段在开发和维护上是一种更佳的解法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值