您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  二级C++精品课程3-1-5:C++运算符之位运算符 【注册男护士专用博客】          

二级C++精品课程3-1-5:C++运算符之位运算符

www.nanhushi.com     佚名   不详 

3.1.5 位运算符
  C++提供6种位运算符,可以进行二进制位的运算,参见表3-7。
  位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。取反运算符是单目运算符,其它位运算符是双目运算符。取反运算符(~)将操作数的二进制位逐位取反。逐位与运算符(&)比较两个操作数对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0。逐位或运算符(|)比较两个操作数对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1。逐位异或运算符(^)比较两个操作数对应的二进制位,当两个二进制位均为1或均为0时,该位的结果取0,否则取1。
  逐位左移运算符(<<)和逐位右移运算符(>>)均有一个正整数n作为右操作数,将左操作数的每一个二进制位左移或右移n位,空缺的位设置为0或1。对于无符号整数或有符号整数,如果符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0还是设置为1,要取决于所用的计算机系统。
表格 表3-7 位运算符
 
运算符 名字 实例
~ 取反 ~'\011' // 得出 '\366'
& 逐位与 '\011' & '\027' // 得出'\001'
| 逐位或 '\011' | '\027' // 得出'\037'
^ 逐位异或 '\011' ^ '\027' // 得出'\036'
<< 逐位左移 '\011' << 2 // 得出'\044'
>> 逐位右移 '\011' >> 2 // 得出'\002'

  位操作运算符是用来进行二进制位运算的运算符。它分为两类:逻辑位运算符和移位运算符。
  1、逻辑位运算符
  (1)单目逻辑位运算符:~(按位求反)
  作用是将各个二进制位由1变0,由0变1。
  (2)双目逻辑运算符:&(按位与),|(按位或),^(按位异或)
  其中优先级&高于^,而^高于|。
  & :两个都为1时结果为1。
  | :两个其中有一个为1则结果为1。
  ^ :两个不同则结果为1,否则为0。
  2、移位运算符
  移位运算符有两个,<<(左移)、>>(右移)。两个 都是双目运算符。
  例. 指出下面表达式的功能。
  (p&0377)|(k&0xff)<<8
  答:将整数p的低字节作为作为结果的低字节,k的低字节作为结果的高字节拼成一个新的整数。

   针对两个操作数011和027,表3-8给出各个位运算符的计算实例,运算结果在表3-7中。为了避免符号位的麻烦(它与机器有关),我们采用无符号的整数。
  unsigned char x = '\011';
  unsigned char y = '\027';

表格 表3-8 位运算符如何运算
 
实例 10进制值 二进制值
x 011
0 0 0 0 1 0 0 1
y 027
0 0 0 1 0 1 1 1
~x 366
1 1 1 1 0 1 1 0
x & y 001
0 0 0 0 0 0 0 1
x | y 037
0 0 0 1 1 1 1 1
x ^ y 036
0 0 0 1 1 1 1 0
x << 2 044
0 0 1 0 0 1 0 0
x >> 2 002
0 0 0 0 0 0 1 0
  位运算符要求操作数是整型数,并按二进制位的顺序来处理它们。位运算符除取反运算符'~'为单目运算符外,其余的都是双目运算符,这可以从上面的表格中的表达式例子中看出来。具体说来:
  '&'为逐位与运算符,用于把两个操作数对应的二进制位进行逻辑与操作,逻辑与的操作上一节已经作了介绍,这里不再赘述。所以0x011&0x001其实就是二进制数0000000000010001B 和二进制数0000000000000001B每一位都进行逻辑与运算,其结果必然是0000000000000001B 即0x001。
  '|'为逐位或运算符,用于把两个操作数对应的二进制位进行逻辑或操作。所以,根据逻辑或的运算规则,表达式0x011|0x001的结果必然是0x011。有兴趣的同学可以自己把相应的二进制位进行逐个的逻辑或运算,看看结果是不是0x011.。
  '^'为逐位异或运算符,用于把两个操作数对应的二进制位进行异或操作。因此,0x011^0x001的结果是0000000000010000B,即0x010。
  '<<'为逐位左移运算符,用于将左操作数的每一个二进制位左移右操作数位,空缺的位设置为0或1。对于无符号整数或有符号整数,但符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0,还是设置为1,要取决于所用的计算机系统。因此,0x011<<2 结果是0x044。
  '>>'为逐位右移运算符,将左操作数的每一个二进制位右移右操作数位,空缺的位设置为0或1,和逐位左移运算符一致。因此,0x011>>2的结果是0x004
  具体的运算的进行还可以参考表3-7位运算符如何运算。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目