正负数原码、反码、补码以及位运算

来源:互联网 发布:java char数组倒序输出 编辑:程序博客网 时间:2024/05/17 09:32

正数:原码、反码和补码都是其二进制数

负数:

原码是将其相反数的原码的符号位(最高位)变为1。如5的原码为0000 0101,-5的原码为1000 0101;

反码是将其原码除了符号位外,每一位取反,-5的反码为1111 1010;

补码是将其反码加1,-5的补码为1111 1011。


位运算

1.按位与 &

双目运算,按二进制 & 运算。只有两位都为1的情况结果才为1,其它情况为0。0&0=0;   0&1=0;    1&0=0;     1&1=1。

应用:

  • 清零:将一个数与0(各位都为0)相与,可将这个数置零。
  • 取指定位:为求X的指定位,将其与对应位为1、其余位为0的数相与,可得到X的指定位。

    如设X=1010 1110,

     取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

     还可用来取X的2、4、6位。

2.按位或 |

双目运算,按二进制 | 运算。只要有一位为1,结果都为1,只有两位为0的情况才为0。0|0=0;   0|1=1;   1|0=1;    1|1=1。

用来对X指定位置置1:确定X要置1的位置,将X与以这些位置为1、其余为0的数相或,可使X的指定位置1。

如设将 X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。


3.异或 ^

双目运算,按二进制 ^ 运算。两位相异为1,相同为0。0^0=0;   0^1=1;   1^0=1;   1^1=0。

应用:

  • 使X的指定位翻转:确定X要翻转的位置,将X与以这些位置为1、其余为0的数异或,可使X指定位翻转。
如设 X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。
  • 与0相异或,保留原值。

4.取反 ~

单目运算,按二进制 ~ 运算。~1=0;   ~0=1。

用来使一个数的最低位为零,可以表示为:a&~1。

~1的值为1111111111111110,再按“与”运算,最低位一定为0。

取反运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符的都高。

5.左移 <<

单目运算。

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

a = a << k 将a的二进制位左移k位,右补0,a * (2的k次方)。 

6.右移 >>

单目运算。

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2。

a = a >> k 将a的二进制位右移k位,正数则左补0,负数则左补1,a=a/(a的k次方)。




原创粉丝点击