什么是按位或.doc

什么是按位或.doc

ID:51583091

大小:51.00 KB

页数:5页

时间:2020-03-13

什么是按位或.doc_第1页
什么是按位或.doc_第2页
什么是按位或.doc_第3页
什么是按位或.doc_第4页
什么是按位或.doc_第5页
资源描述:

《什么是按位或.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、什么是按位或,什么是按位异或,什么是按位与&按位与,

2、按位或,^按位异或AND(位与&)OR(位或

3、)XOR(位异或^)1&1=11&0=00&1=00&0=01

4、1=11

5、0=10

6、1=10

7、0=01^1=01^0=10^1=10^0=01.按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如:9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001(1的二进制补码)可见9&5=1。按位与运算通

8、常用来对某些位清0或保留某些位。例如把a的高八位清0,保留低八位,可作a&255运算(255的二进制数为0000000011111111)。main(){inta=9,b=5,c;c=a&b;printf("a=%db=%dc=%d",a,b,c);}2.按位或运算按位或运算符“

9、”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如:9

10、5可写算式如下:00001001

11、0000010100001101(十进制为13)可见9

12、5=13main(){inta=9,b

13、=5,c;c=a

14、b;printf("a=%db=%dc=%d",a,b,c);}3.按位异或运算按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:00001001^0000010100001100(十进制为12)main(){inta=9;1. 位运算整数在计算机中用二进制的位来表示,C语言提供一些运算符可以直接操作整数中的位,称为位运算,这些运算符的操作数都必须是整型的。1.1. 按位与、或、异或、取反运算在第 3 节“布尔代数”讲过逻

15、辑与、或、非运算,并列出了真值表,对于整数中的位也可以做与、或、非运算,C语言提供了按位与(BitwiseAND)运算符&、按位或(BitwiseOR)运算符

16、和按位取反(BitwiseNOT)运算符~,此外还有按位异或(BitwiseXOR)运算符^,下面用二进制的形式举几个例子。图 16.1. 位运算注意,&、

17、、^运算符都是要做UsualArithmeticConversion的(其中有一步是IntegerPromotion),~运算符也要做IntegerPromotion,所以在C语言中其实并不存在8位整数的位运算,操作数在做位运算之前都至少被提升为in

18、t型了,上面用8位整数举例只是为了书写方便。比如:unsignedcharc=0xfc;unsignedinti=~c;计算过程是这样的:常量0xfc是int型的,赋给c要转成unsignedchar,值不变;c的十六进制表示是fc,计算~c时先提升为整型(000000fc)然后取反,最后结果是ffffff03。注意,如果把~c看成是8位整数的取反,最后结果就得3了,这就错了。为了避免出错,一是尽量避免不同类型之间的赋值,二是每一步计算都要按上一章讲的类型转换规则仔细检查。1.2. 移位运算移位运算符(BitwiseShift)包括左移<<和右移>>。左移将一个

19、整数的各二进制位全部左移若干位,例如0xcfffffff3<<2得到0x3fffffcc:图 16.2. 左移运算最高两位的11被移出去了,最低两位又补了两个0,其它位依次左移两位。但要注意,移动的位数必须小于左操作数的总位数,比如上面的例子,左边是unsignedint型,如果左移的位数大于等于32位,则结果是Undefined。移位运算符不同于+-*/==等运算符,两边操作数的类型不要求一致,但两边操作数都要做IntegerPromotion,整个表达式的类型和左操作数提升后的类型相同。在一定的取值范围内,将一个整数左移1位相当于乘以2。比如二进制11(十进

20、制3)左移一位变成110,就是6,再左移一位变成1100,就是12。读者可以自己验证这条规律对有符号数和无符号数都成立,对负数也成立。当然,如果左移改变了最高位(符号位),那么结果肯定不是乘以2了,所以我加了个前提“在一定的取值范围内”。由于计算机做移位比做乘法快得多,编译器可以利用这一点做优化,比如看到源代码中有i*8,可以编译成移位指令而不是乘法指令。当操作数是无符号数时,右移运算的规则和左移类似,例如0xcfffffff3>>2得到0x33fffffc:图 16.3. 右移运算最低两位的11被移出去了,最高两位又补了两个0,其它位依次右移两位。和左移类似,

21、移动的位数也必须小于左操

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。