运算符 |、||、&、&&、异或、~、!、<<、
位运算: 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。
8进制通常以0开头,16进制通常以0x开头。8进制1位对应3位2进制,16进制一位对应4位2进制。
二进制 八进制 二进制 十六进制 二进制 十六进制
000 0 0000 0 1000 8
001 1 0001 1 1001 9
010 2 0010 2 1010 A
011 3 0011 3 1011 B
100 4 0100 4 1100 C
101 5 0101 5 1101 D
110 6 0110 6 1110 E
111 7 0111 7 1111 F
10进制转二进制:正整数转二进制,负整数转二进制,小数转二进制;
1>正整数转成二进制:除二取余,然后倒序排列,高位补零。
2>负整数转换成二进制: 先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42,如图4所示为方法解释。最后 即为:(-42)10=(11010110)2
3>小数转换为二进制:对小数点以后的数乘以2,有一个结果,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列,举个例子吧,比如0.125,如图5所示。
(1)按位与运算符(&) : 0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1。
按位与运算有两种典型用法,一是取一个位串信息的某几位,如以下代码截取x的最低7位:x & 0177。二是让某变量保留某几位,其余位置0,如以下代码让x只保留最低6位:x = x & 077。以上用法都先要设计好一个常数,该常数只有需要的位是1,不需要的位是0。用它与指定的位串信息按位与。
(2)按位或运算符(|):0
| 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
按位或运算的典型用法是将一个位串信息的某几位置成1。如将要获得最右4为1,其他位与变量j的其他位相同,可用逻辑或运算017|j。若要把这结果赋给变量j,可写成: j = 017|j
(3)按位异或运算符(^): 0
^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0
按位异或运算的典型用法是求一个位串信息的某几位信息的反。如欲求整型变量j的最右4位信息的反,用逻辑异或运算017^j,就能求得j最右4位 的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。交换两个值,不用临时变量.
(4)按位取反运算符(~)
按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。
(5)左移运算符(<<) :在二进制数运算中,在信息没有因移动而丢失的情况下,每左移1位相当于乘2。如4 << 2,结果为16。
(6)右移运算符(>>):与左移相反,对于小整数,每右移1位,相当于除以2。
在右移时,需要注意符号位问题。对无符号数据,右移时,左端空出的位用0补充。对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0 补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。