正数:原码、反码和补码都是其二进制数。
负数:
原码是将其相反数的原码的符号位(最高位)变为1。如5的原码为0000 0101,-5的原码为1000 0101;
反码是将其原码除了符号位外,每一位取反,-5的反码为1111 1010;
补码是将其反码加1,-5的补码为1111 1011。
位运算
1.按位与 &
双目运算,按二进制 & 运算。只有两位都为1的情况结果才为1,其它情况为0。0&0=0;
应用:
- 清零:将一个数与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;
用来对X指定位置置1:确定X要置1的位置,将X与以这些位置为1、其余为0的数相或,可使X的指定位置1。
如设将 X=10100000的低4位置1 ,用 X
双目运算,按二进制 ^ 运算。两位相异为1,相同为0。0^0=0;
应用:
- 使X的指定位翻转:确定X要翻转的位置,将X与以这些位置为1、其余为0的数异或,可使X指定位翻转。
- 与0相异或,保留原值。
4.取反 ~
单目运算,按二进制 ~ 运算。~1=0;
用来使一个数的最低位为零,可以表示为:a&~1。
~1的值为1111111111111110,再按“与”运算,最低位一定为0。
取反运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他运算符的都高。5.左移 <<
单目运算。
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
a = a << k 将a的二进制位左移k位,右补0,a
单目运算。
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。操作数每右移一位,相当于该数除以2。
a = a >> k 将a的二进制位右移k位,正数则左补0,负数则左补1,a=a/(a的k次方)。