资源描述:
《C语言第11章 位运算》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言第11章位运算哈尔滨理工大学计算中心二、八、十、十六进制换算表十进制二进制八进制十六进制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F2位运算计算机中的信息是以二进制0、1存储的每个0或1称为一个"位"(bit)在C语言中提供了对二进制位(bit)的直接操作,使C具有了某些汇编语言才有的功能3位运算符C语言的位运算符有以下几个&按位"与"
2、按位"或"^
3、按位"异或"~按位取反<<左移>>右移4位运算符说明位运算的对象只能是int或char位运算是对每一个二进制位分别进行操作,每个字节(byte)是8个二进制位(bit),以前所进行的所有变量操作均以字节为基本单位"~"为单目运算符,其他均为双目运算符按运算符优先级顺序由高到底排列为:~,<<,>>,&,^,
4、<<和>>优先级相同也可以使用如"&="或"
5、="等简写形式5按位与运算(&)"与"运算的规则如下:a0011b0101a&b0001与"乘法"类似6"与"运算举例unsignedinta1=077,a2=0150;printf("%o",a1&a2);a
6、1=0177即二进制的0000000000111111a2=0177即二进制的0000000001101000&0000000000101000即八进制的0507按位或运算(
7、)"或"运算的规则如下:a0011b0101a
8、b0111与"加法"类似8"或"运算举例unsignedchara1=0x07,a2=0xd0;printf("%x",a1
9、a2);a1=0x07即二进制的00000111a2=0xd0即二进制的11100000
10、11100111即十六进制的0xd79按位异或运算(^)"异或"运算的规则如下:a0011b0101a^b0110a,b值相异
11、结果为1,否则结果为010"异或"运算举例unsignedchara1=0x20,a2=0x35;printf("%x",a1^a2);a1=0x07即二进制的00100000a2=0xd0即二进制的00110101^00010101即十六进制的0x1511按位取反运算(~)"取反"运算的规则如下:a01~a10"1"变成"0","0"变成"1"12"取反"运算举例unsignedchara1=0x20;printf("%x",~a1);a1=0x07即二进制的00100000~11011111即十六进制的0xdf13左移运算(<<)"左移"运算的格式如下:表
12、达式1<<表达工2表达式1为移位的对象,表达式2为移位的位数左移后,右边的空位补"0"左移一位相当于将操作数乘以214左移运算举例unsignedchara1=0x12;printf("%x",a1<<3);a1=0x07即二进制的00010010<<3左移三位后变为:00010010000即十六进制的0x90舍掉补015右移运算(>>)"右移"运算的格式如下:表达式1>>表达工2表达式1为移位的对象,表达式2为移位的位数对于无符号数,右移后,左边的空位补“0”对于带符号数,若符号位为0,右移后,左边的空位补“0”;若符号位为1,右移后,左边的空位补“0”或补
13、“1”随计算机系统不同,补“0”的称为逻辑右移,补“1”的称为算术右移16右移运算举例unsignedchara1=0x12;printf("%x",a1>>3);a1=0x07即二进制的00010010>>3右移三位后变为:00000010010即十六进制的0x02舍掉补017位运算应用举例取一整数从右端开始的4~7位。0748150000右移4位&000000001111000000000000000018位运算应用举例-续低4位为1,其余为0的数:000000000000000001111111111111111~0~0<<411111111000011
14、110000000011110000~(~0<<4)整个程序的表达式为:(a>>4)&(~(~0<<4))19位域(bitfield)C语言允许在一个结构体中以位为单位来指定其成员所占内存的长度,称为位域(bitfield)例:structpacked_data{unsigneda:2;unsignedb:6;unsignedc:4;unsignedd:4;inti;}data;此时,变量data的各个成员中,a,b,c,d分别占2位、6位、4位、4位,i占16位,整个data占的空间为4bytes当位域成员所占空间不足一个字节时,系统自动将空余部分闲置不用2
15、0位域说明位域成员的类型只能为unsi