电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

C语言第11章 位运算VIP免费

C语言第11章 位运算_第1页
1/21
C语言第11章 位运算_第2页
2/21
C语言第11章 位运算_第3页
3/21
CC语言第语言第1111章位运算章位运算哈尔滨理工大学计算中心Page2CProgramming二、八、十、十六进制换算表二、八、十、十六进制换算表十进制二进制八进制十六进制00000001000111200102230011334010044501015560110667011177810001089100111910101012A11101113B12110014C13110115D14111016E15111117FPage3CProgramming位运算位运算计算机中的信息是以二进制0、1存储的每个0或1称为一个"位"(bit)在C语言中提供了对二进制位(bit)的直接操作,使C具有了某些汇编语言才有的功能Page4CProgramming位运算符位运算符C语言的位运算符有以下几个&按位"与"|按位"或"^按位"异或"~按位取反<<左移>>右移Page5CProgramming位运算符说明位运算符说明位运算的对象只能是int或char位运算是对每一个二进制位分别进行操作,每个字节(byte)是8个二进制位(bit),以前所进行的所有变量操作均以字节为基本单位"~"为单目运算符,其他均为双目运算符按运算符优先级顺序由高到底排列为:~,<<,>>,&,^,|<<和>>优先级相同也可以使用如"&="或"|="等简写形式Page6CProgramming按位与运算(按位与运算(&&))"与"运算的规则如下:a0011b0101a&b0001•与"乘法"类似Page7CProgramming""与与""运算举例运算举例unsignedinta1=077,a2=0150;printf("%o",a1&a2);a1=0177即二进制的0000000000111111a2=0177即二进制的0000000001101000&0000000000101000即八进制的050Page8CProgramming按位或运算按位或运算(|)(|)"或"运算的规则如下:a0011b0101a|b0111•与"加法"类似Page9CProgramming""或或""运算举例运算举例unsignedchara1=0x07,a2=0xd0;printf("%x",a1|a2);a1=0x07即二进制的00000111a2=0xd0即二进制的11100000|11100111即十六进制的0xd7Page10CProgramming按位异或运算(按位异或运算(^^))"异或"运算的规则如下:a0011b0101a^b0110•a,b值相异结果为1,否则结果为0Page11CProgramming""异或异或""运算举例运算举例unsignedchara1=0x20,a2=0x35;printf("%x",a1^a2);a1=0x07即二进制的00100000a2=0xd0即二进制的00110101^00010101即十六进制的0x15Page12CProgramming按位取反运算(按位取反运算(~~))"取反"运算的规则如下:a01~a10•"1"变成"0","0"变成"1"Page13CProgramming""取反取反""运算举例运算举例unsignedchara1=0x20;printf("%x",~a1);a1=0x07即二进制的00100000~11011111即十六进制的0xdfPage14CProgramming左移运算(左移运算(<<<<))"左移"运算的格式如下:表达式1<<表达工2表达式1为移位的对象,表达式2为移位的位数左移后,右边的空位补"0"左移一位相当于将操作数乘以2Page15CProgramming左移运算举例左移运算举例unsignedchara1=0x12;printf("%x",a1<<3);a1=0x07即二进制的00010010<<3左移三位后变为:00010010000即十六进制的0x90舍掉补0Page16CProgramming右移运算(右移运算(>>>>))"右移"运算的格式如下:表达式1>>表达工2表达式1为移位的对象,表达式2为移位的位数对于无符号数,右移后,左边的空位补“0”对于带符号数,若符号位为0,右移后,左边的空位补“0”;若符号位为1,右移后,左边的空位补“0”或补“1”随计算机系统不同,补“0”的称为逻辑右移,补“1”的称为算术右移Page17CProgramming右移运算举例右移运算举例unsignedchara1=0x12;printf("%x",a1>>3);a1=0x07即二进制的00010010>>3右移三位后变为:00000010010即十六进制的0x02舍掉补0Page18CProgramming位运算应用举例位运算应用举例取一整数从右端开始的4~7位。0748150000右移4位&0000000011110000000000000000Page19CProgramming位运算应用举例位运算应用举例--续续低4位为1,其余为0的数:000000000000000001111111111111111~0~0<<411111111000011110000000011110000~(~0<<4)整个程序的表达式为:(a>>4)&(~(~0<<4))Page20CProgramming位域(位域(bitfieldbitfield))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当位域成员所占空间不足一个字节时,系统自动将空余部分闲置不用Page21CProgramming位域说明位域说明位域成员的类型只能为unsigned或int在存储单元中,位域的分配方式因机器而异,可不关心位域可当做整型变量使用,但要注意位域表示数值的范围,如两位二进制的范围为0~3,三位二进制的范围为0~7不能定义位域数组位域可按整型量的形式加参运算或赋值、输出

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

C语言第11章 位运算

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部