C语言中的一些关键字(十二)

来源:互联网 发布:仙知机器人 冯源 编辑:程序博客网 时间:2024/06/15 17:51

位运算

3.按位异或──^
(1)格式:x^y
(2)规则:对应位相同时为0,不同时为1:3^9=10。
(3)主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。
4.按位取反──~
(1)格式:~x
(2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1:在IBM-PC机中,~0=0xffff,~9=0xfff6。
(3)主要用途:间接地构造一个数,以增强程序的可移植性。
5.按位左移──<<
(1)格式:x<< 位数
(2)规则:使操作数的各位左移,低位补0,高位溢出:5<<2=20。


6.按位右移──>>
(1)格式:x>>位数
(2)规则:使操作数的各位右移,移出的低位舍弃;高位:
1)对无符号数和有符号中的正数,补0;
2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20 >> 2=5。
说明:
(1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。
(2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。
例如,5<<2=20:0101 → 10100,20 >> 2=5:10100 → 00101


(3)实现&、|、^运算主要用途的方法
 1)构造1个整数:该数在要取(或保留)的位、或要置1的位、或要翻转的位上为1,其余均为0。
 2)进行按位与、或按位或、或按位异或操作。
(4)实现按位取反主要用途的方法
 1)求~0,间接地构造一个全1的数;
 2)按需要进行左移或右移操作,构造出所需要的数。
例如,直接构造一个全1的数,在IBM-PC机中为0xffff(2字节),而在VAX-11/780上,却是0xffffffff(4字节)。如果用~0来构造,系统可以自动适应。
应用举例
[案例] 从键盘上输入1个正整数给int变量num,输出由8~11位构成的数(从低位、0号开始编号)。

0 0