原码 反码 补码

位运算是指二进制位的运算,在系统软件中,经常要处理一些二进制位的问题,例如:在进行计算机之间的通讯的时候需要通过某些标志位来进行判断通讯是否成功。

  计算机中的存储器就是由许多字节(byte)单元组成的。一般,内存的最小度量单位就叫做位(bit),也叫比特。而一个字节就是由8个二进制位组成,其中,最右边的一位叫做最低位,最左边的一位叫做最高位。

  所以,一个16位的整数将在内存中占据2个字节的存储空间,一个32位的整数类型占据4个字节的存储空间。

  数据有原码、反码、补码3种表示形式,下面我们逐一学习!

  二、原码、反码、补码介绍

  ①原码

  原码是指将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

  例如:数字6在计算机中原码表示为:0000 0110

  其中,第一个数字0是符号位,0表示正数,0000110是数字6的二进制数据表示。

  数字-6在计算机中原码表示为:1000 0110

  以上是在8位计算机中的原码表示,如果在32位或16位计算机中,表示方法也是一样的,只是多了几个数字0而已。

  例如,在32位计算机中数字6的原码表示为:0000 0000 0000 0000 0000 0000 0000 0110

  在16位计算机中数字6的原码表示为:0000 0000 0000 0110

  ②反码

  反码表示规则为:如果是正数,则表示方法和原码一样;如果是负数,则保留符号位1,然后将这个数字的原码按照每位取反,则得到这个数字的反码表示形式。

  例如,数字6在8位计算机中的反码就是它的原码:0000 0110

  数字-6在8位计算机中的反码为:1111 1001

  ③补码

  补码是计算机表示数据的一般方式,其规则为:如果是整数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。

  例如:数字6在8位计算机中的补码就是它的原码:0000 0110

  数字-6在8位计算机中的补码为:1111 1010

④为什么int类型-1在内存中表示为ff ff ff ff?

首先-1是一个有符号int,原码为10000000 00000000 00000000 00000001,在内存中存储的是补码,10000000 00000000 00000000 00000001的补码是

11111111 11111111 11111111 11111111。所以-1在内存中存的就是11111111 11111111 11111111 11111111。对于unsigned int i = -1;“=”的作用就是

将-1的内存中存储的内容复制到i的内存中,所以i的内存是这样00000000 00000000 00000000 0000000 11111111 11111111 11111111 11111111所以说

讲-1赋值给一个unsigned类型的数,那个unsigned数将会是一个值很大的数。


PS:原码转成反码或者补码的时候符号位不处理;内存中以补码存储值。

From:http://www.dzwebs.net/2019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值