background image

右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.
右移对符号位的处理和左移不同,对于有符号整数来说,比如 int 类型,右移会保持符号位不变,例如:
int

 

i

 

=

 

0x80000000;

i = i >> 1;    //i 的值不会变成 0x40000000,而会变成 0xc0000000
就是说,符号位向右移动后,正数的话补 0,负数补 1,也就是汇编语言中的算术右移.同样当移动的位数
超过类型的长度时,会取余数,然后移动余数个位.
       负数 10100110 >>5(假设字长为 8 位),则得到的是    11111101
总之,在 C 中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可
以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多. 

  在很多系统程序中常要求在位(bit)

 

一级进行运算或处理。C语言提供了位运算的功能, 这使得C语

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 

 

 

────────────────────────────
&

 

 

|

 

 

^

 

 

-

 

 

>>

 

 

<<

 

 

 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
         按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及

,

 

         我们要注意区分位运算和逻辑运算。

         1. 

 

按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。

只有对应的两个二进位均为 1 时,结果位才为 1 ,否则为 0。参与运算的数以补码方式出现。
例 如 : 9&5

 

可 写 算 式 如 下 : 00001001 (9 的 二 进 制 补 码 )&00000101 (5 的 二 进 制 补 码 )  

00000001   (1

)

9&5=1

         按位与运算通常用来对某些位清 0 或保留某些位。例如把 a 

 

的高八位清 0   

 

, 保留低八位, 可

 

a&255  

 

运 算

(   255   的 二 进 制 数 为

0000000011111111) 。

main(){
int

 

a=9,b=5,c;

c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}
2. 

 

按位或运算 按位或运算符 |”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对

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

9|5

 

00001001|00000101

00001101

 

(

13)

9|5=13

main(){
int

 

a=9,b=5,c;

c=a|b;