资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言第11章 位运算哈尔滨理工大学 计算中心C CProgrammingProgramming二、八、十、十六进制换算表二、八、十、十六进制换算表十进制二进制八进制十六进制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117F2C CProgrammingProgramming位位运算运算q计算机中的信息是以二进制0、1存储的q每个0或1称为一个位(bit)q在C语言中提供了对二进制位(bit)的直接操作,使C具有了某些汇编语言才有的功能3C CProgrammingProgramming位位运算符运算符qC语言的位运算符有以下几个v& 按位与v| 按位或v 按位异或v 按位取反v 右移4C CProgrammingProgramming位运算符说明位运算符说明q位运算的对象只能是int或charq位运算是对每一个二进制位分别进行操作,每个字节(byte)是8个二进制位(bit),以前所进行的所有变量操作均以字节为基本单位q为单目运算符,其他均为双目运算符q按运算符优先级顺序由高到底排列为:v , , &, , |v优先级相同q也可以使用如&=或|=等简写形式5C CProgrammingProgramming按位与按位与运算(运算(& &)q与运算的规则如下:a0011b0101a&b0001与乘法类似6C CProgrammingProgramming 与与 运算举例运算举例qunsigned int a1=077,a2=0150;qprintf(%o,a1&a2);a1=0177即二进制的00000000 00111111a2=0177即二进制的00000000 01101000 &00000000 00101000即八进制的0507C CProgrammingProgramming按位或运算按位或运算(|)(|)q或运算的规则如下:a0011b0101a|b0111与加法类似8C CProgrammingProgramming 或或 运算举例运算举例qunsigned char a1=0x07,a2=0xd0;qprintf(%x,a1|a2);a1=0x07即二进制的 00000111a2=0xd0即二进制的 11100000 | 11100111即十六进制的0xd79C CProgrammingProgramming按位异或运算(按位异或运算( )q异或运算的规则如下:a0011b0101ab0110a,b值相异结果为1,否则结果为010C CProgrammingProgramming 异或异或 运算举例运算举例qunsigned char a1=0x20,a2=0x35;qprintf(%x,a1a2);a1=0x07即二进制的 00100000a2=0xd0即二进制的 00110101 00010101即十六进制的0x1511C CProgrammingProgramming按位取反运算(按位取反运算( )q取反运算的规则如下:a01a101变成0,0变成112C CProgrammingProgramming 取取反反 运算举例运算举例qunsigned char a1=0x20;qprintf(%x,a1);a1=0x07即二进制的 00100000 11011111即十六进制的0xdf13C CProgrammingProgramming左移运算(左移运算()q左移运算的格式如下:v表达式1表达工2v表达式1为移位的对象,表达式2为移位的位数v左移后,右边的空位补0v左移一位相当于将操作数乘以214C CProgrammingProgramming左移左移运算举例运算举例qunsigned char a1=0x12;qprintf(%x,a13);a1=0x07即二进制的 00010010 )q右移运算的格式如下:v表达式1表达工2v表达式1为移位的对象,表达式2为移位的位数v对于无符号数,右移后,左边的空位补“0”v对于带符号数,若符号位为0,右移后,左边的空位补“0”;若符号位为1,右移后,左边的空位补“0”或补“1”随计算机系统不同,补“0”的称为逻辑右移,补“1”的称为算术右移16C CProgrammingProgramming右移运算举例右移运算举例qunsigned char a1=0x12;qprintf(%x,a13);a1=0x07即二进制的 00010010 3右移三位后变为: 00000010010 即十六进制的0x02舍掉补017C CProgrammingProgramming位位运算应用举例运算应用举例q取一整数从右端开始的47位。0748150000右移4位&000000001111000000000000000018C CProgrammingProgramming位运算应用举例位运算应用举例- -续续低4 位为1,其余为0的数: 00000000000000000111111111111111100411111111000011110000000011110000(04)&(04) 19C CProgrammingProgramming位位域(域(bit fieldbit field)qC语言允许在一个结构体中以位为单位来指定其成员所占内存的长度,称为位域(bit field)q例:struct packed _dataunsigned a:2;unsigned b:6;unsigned c:4;unsigned d:4;int i;data;v此时,变量data的各个成员中,a,b,c,d分别占2位、6位、4位、4位,i占16位,整个data占的空间为4bytesv当位域成员所占空间不足一个字节时,系统自动将空余部分闲置不用20C CProgrammingProgramming位域位域说明说明q位域成员的类型只能为unsigned 或intq在存储单元中,位域的分配方式因机器而异,可不关心q位域可当做整型变量使用,但要注意位域表示数值的范围,如两位二进制的范围为03,三位二进制的范围为07q不能定义位域数组q位域可按整型量的形式加参运算或赋值、输出21
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号