负数与正数的二进制转换以及计算类型

众所周知,计算机存储的数据,正数使用二进制表示,负数使用补码表示。

十进制与二进制转换方法;

正数转二进制:

将该数除以2,得到的余数就是二进制的最低位,反复相除,当结果为0时,将所有余数排列得到的就是该数的二进制。例如13转二进制:

13/2=6......1

6/2=3......0

3/2=1......1

1/2=0......1

即13的二进制为:1101

二进制转正数:

1101,1*2的三次方+1*2的二次方+0*2的1次方+1*2的0次方,结果为8+4+1=13

负数转补码:

1.先将正数部分按照上述方法转成二进制;

2.然后将得到的二进制结果取反(0变1,1变0);

3.将取反后二进制加1;

得到的就是负数的补码。

例如-10,正数部分转成二进制为1010,取反后0101,加1后0110。0110就是负数-10的补码。

补码转负数:

1.将补码取反;

2.取反后结果加一;

3.按照二进制转正数方法转成正数;

4.加上负号。

例如0110,取反1001,加一1010,转正数:1*2的三次方+0*2的二次方+1*2的一次方+0*2的0次方=8+0+2+0=10,加上负号-10.

二进制之间的运算类型:

  1. 位与(AND,符号&):如果两个相应的位都是1,则结果为1,否则为0。

  2. 例如:5和10位与运算(5&10),5的二进制位0101,10的二进制1010,得到结果为0000,即结果为0。

  3. 位或(OR,符号|):如果两个相应的位中至少有一个是1,则结果为1,否则为0。

  4. 例如:5和10位或运算(5|10),5的二进制位0101,10的二进制1010,得到结果为1111,即结果为15。

  5. 位异或(XOR,符^):如果两个相应的位不同,则结果为1,否则为0。

  6. 例如:5和10位异或运算(5^10),5的二进制位0101,10的二进制1010,得到结果为1111,即结果为15。

  7. 位非(NOT,符号~):对一个数的每个位取反,即1变成0,0变成1。上述负数转补码第二步就是位非运算。

  8. 例如:5的位非运算(~5),5的二进制为101,计算后最高位符号改变,所以从二进制变成补码,为11111010,是-6的补码,即结果为-6

  9. 左移(Left Shift,符号<<):将一个数的所有位向左移动指定的位数,右边空出的位用0填充。

  10. 例如:5左移一位(5<<1),5的二进制为101,计算后1010,结果为10

  11. -5左移一位(-5<<1),-5补码为11111011,计算后11110110,转成十进制为-10

  12. 右移(Right Shift,符号>>):将一个数的所有位向右移动指定的位数,左边空出的位用符号位(最高位)的值填充。

  13. 例如:5右移一位(5>>1),5的二进制为101,计算后010,结果为2

  14. -5右移一位(-5>>1),-5补码为11111011,计算后11111101,转换成十进制为-3

  15. 无符号右移(Unsigned Right Shift,符号>>>):将一个数的所有位向右移动指定的位数,右边空出的位用0填充,不论原来的符号位是什么。

  16. 例如:5无符号右移一位(5>>>1),5的二进制为101,计算后010,结果为2

  17. -5无符号右移一位(-5>>>1),-5补码为11111011,计算后01111101,转换成十进制为2147483645,因为无符号右移后最大位补充的是0,转换成十进制后会变成1,在前面为了方便所以只写了二进制或补码的简写,完整写法应该是32位表示,而2147483647是32位能表示的最大数,所以是2147483647。

  18. 注意右移和无符号右移对于负数的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>