- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
位运算及其运算符 1.按位与── (1)格式:xy (2)规则:对应位均为1时才为1,否则为0:39=1。 例如,39=1: 0011 1001 ──── 0001=1 2.按位或──| (1)格式:x|y (2)规则:对应位均为0时才为0,否则为1:3|9=11。 例如,3|9=11: 0011 | 1001 ──── 1011=11 3.按位异或──^ (1)格式:x^y (2)规则:对应位相同时为0,不同时为1:3^9=10。 4.按位取反──~ (1)格式:~x (2)规则:各位翻转,即原来为1的位变成0,原来为0的位变成1。 5.按位左移── (1)格式:x 位数 (2)规则:使操作数的各位左移,低位补0,高位溢出:52=20。 6.按位右移── (1)格式:x位数 (2)规则:使操作数的各位右移,移出的低位舍弃;高位: 1)对无符号数和有符号中的正数,补0; 2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。例如,20 2=5。 说明: (1)x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。 (2)参与运算时,操作数x和y,都必须首先转换成二进制形式,然后再执行相应的按位运算。 例如,52=20:0101 → 10100,20 2=5:10100 → 00101。 说明 1.复合赋值运算符 除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符: =、|+、^=、=、= 2.不同长度数据间的位运算──低字节对齐,短数的高字节按最高位补位: (1)对无符号数和有符号中的正数,补0; (2)有符号数中的负数,补1。 2007年4月 1、main() {unsigned char a=2,b=4,c=5,d; d=a|b; d=c; printf(“%d\n”,d);} A) 3 B) 4 C) 5 D) 6 2、int a=1,b=2,c; c=a^ (b2); A) 6 B) 7 C) 8 D) 9 2007年9月 1、有以下程序 #includestdio.h main( ) {int a=1,b=2,c=3,x; x=(a^b)c; printf(%d\n,x); } 程序的运行结果是 A)0 B)1 C)2 D)3 2008年4月 1、变量a中的数据用二进制表示的形式变量b中的数据用二进制表示的形式若要求将a的高4位取反,低四位不变,所要执行的运算是 A)a^b B)a|b C)ab D)a4 2008年9月 1、有以下程序 #include stdio.h main( ) { char a=4; printf(%d\n, a=a1); } 程序的运行结果是 A)40 B)16 C)8 D)4 2009年3月 1、有以下程序 #include stdio.h main() { int a=5, b=1, t; t=(a2)|b; printf(%d\n, t); } 程序运行后的输出结果是 A)21 B)11 C)6 D)1 2009年9月 1、有以下程序 int r=8; printf(%d\n, r1); 输出结果是 A)16 B)8 C)4 D)2 * 第11讲 位运算 为了节省内存空间,在系统软件中常将多个标志状态简单地组合在一起,存储到一个字节(或字)中。C语言是为研制系统软件而设计的,所以她提供了实现将标志状态从标志字节中分离出来的位运算功能。 所谓位运算是指,按二进制位进行的运算。
文档评论(0)