文档介绍:第12章位运算
学习目标:
掌握C语言中的位运算。
掌握六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
理解位运算赋值运算符: &=、|=、^=、<<=、>>=。
了解C语言中的一种特殊结构类型:位段类型。
为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以它提供了实现将标志状态从标志字节中分离出来的位运算功能。
所谓位运算是指,按二进制位进行的运算。
位运算和位运算符
前面介绍的各种运算都是以字节作为基本单位进行的。但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。
Turbo C中按位运算符有:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
        操作符                       作用
─────────────────────────────────
          &                        位逻辑与
          |                        位逻辑或
          ^                       位逻辑异或
          -                        位逻辑反
          >>                         右移
          <<                         左移
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符型和整数型变量以及它们的变体, 对其它数据类型不适用。
关系运算和逻辑运算表达式的结果只能是1或0。而按位运算的结果可以取0 或1以外的值。
要注意区别按位运算符和逻辑运算符的不同, 例如, 若x=7, 则x&&8 的值为真(两个非零值相与仍为非零), 而x&8的值为0。
移位运算符“>>”和“<<”是指将变量中的每一位向右或向左移动, 其通常形式为:
     右移:   变量名>>移位的位数
     左移:   变量名<<移位的位数
经过移位后,一端的位被“挤掉”,而另一端空出的位用0填补,所以,Turbo C中的移位不是循环移动的。
说明:
1. 变量名x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。
2. 参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。
例如,5<<2=20:0101 → 10100,20 >> 2=5:10100 → 00101。
3. 实现&、|、^运算主要用途的方法
(1)构造一个整数:该数在要取(或保留)的位、或要置1的位、或要翻转的位上为1,其余均为0。
(2)进行按位与、或按位或、或按位异或操作。
(1)求~0,间接地构造一个全1的数;
(2)按需要进行左移或右移操作,构造出所需要的数。
按位与
本节介绍的是按位与运算符"&"。按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。即
1&1=1;1 &