C语言的六种位运算符&,|,^,~,<<,>>,>>>

 

&按位与

举例:
010101
100101
------
000101
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 保留低八位, 可作 a&255 运算 ( 255 的二进制数为11111111)

 

|按位或

举例:

010101
100101
------
110101
只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

^按位异或

举例:

010101
100101
------
110000

 参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现


~取反

举例:

010101 ~后
------
101010

<<左移

举例:

12<<3

------

12*2^3

 

<<=

举例:

a<<=n

等价a=a<<n

-----

a=a*2^n

 

>>右移

 

举例:

12>>3

------

12/2^3

 

 

 

>>>无符号右移

举例:

11111111 11111111 11111001

------

00111111 11111111 11111110

右移2位,最后2位舍去,前面补0

 

负数的表示方式

0000 0001(1的源码)

1000 0001(1的源码最高位设置为1表示负数)

1111 1110(高位不动,再取反后的结果)

1111 1111 (然后在+1表示补码:最后得到-1的源码)

所以-1的二进制:1111 1111

总结:正数的源码高位设置为1,除高位外,其他位取反,然后+1(补码),最后得到此正数的二进制负数

 

1111 1000-1左移3位)

0001(1)1\*2^0=1\*1 = 1

0010(1+1=2)(1\*2^1)+(0\*2^0) = 2+0 = 2

0011(1+1+1=3)(1\*2^1)+(1\*2^0) = 2+1 = 3

 

posted @ 2016-07-21 10:14  不缺重头再来的勇气  阅读(278)  评论(0)    收藏  举报