C++运算符之位运算符

C++同时具有高级语言与汇编语言的优点,C++提供了6个位运算符,可以对整数进行位操作,位操作就是对数据按二进制位进行操作。

位运算符优先级
按位与(&)10
按位或 ()12
按位异或(^)11
按位取反(~)2
左移(<<) 右移(>>)7

运算符优先级大小:取反(~)> 左移(<<)右移(>>)> 与(&)> 异或(^)> 或(|)

课本中的习题:

①.若a=1,b=2,c=3,d=-8下列各式的结果是什么?

(1) a|b-c

(2) a^b&-c

(3) a&b|c

(4) a|b&c

(5) d>>2

解析:

a: 0000 0001
b: 0000 0010
c: 0000 0011
Tip: 负数在计算机中是以补码的形式存储的,负数转换成二进制可以通过其绝对值的原码各位取反然后加1。
例如求-127的补码:

127的原码:  01111111

-127的补码:  10000001

(1)、

先计算b-c = -1, 1的原码是0000 0001 各位取反然后加1得到1111 1111 即为-1,
所以计算 1|-1 :

      1:       0000 0001
	 -1:(|)    1111 1111
——————————————————————————————
      1 | -1:    1111 1111

结果:-1

(2)、

c = -3, -3: 1111 1101
因为优先级&>^,所以先计算b&-c

	  2:      0000 0010
	 -3:(&)  1111 1101
————————————————————————————
     2&-3:    0000 0000

求出:0
再计算1^0

     1:      0000 0001
	 0:(^)  0000 0000
———————————————————————————
     1^0:    0000 0001

结果:1

(3)、

因为优先级&>|,所以先计算a&b

     1:      0000 0001
	 2:(&)   0000 0010
————————————————————————————
     1&2:     0000 0000

求出:0
再计算0|c

     0:      0000 0000
	 3:(|)   0000 0011
————————————————————————————
     0|3:     0000 0011

结果:3

(4)、

因为优先级&>|,所以先计算b&c

      2:      0000 0010
	  3:(&)   0000 0011
——————————————————————————————
      2&3:     0000 0010

求出:2
再计算1|2

      1:      0000 0001
	  2:(|)   0000 0010
——————————————————————————————
      1|2:     0000 0011

结果:3

(5)、

左移是按照指定的位数将一个数的二进制值向左移位。左移后,低位补0,移除的高位舍弃,如果该数是负数的话,则补1。
右移是按照指定的位数将一个数的二进制值向右移位。右移后,高位补0,移除的低位舍弃,如果该数是负数的话,则补1。

d: 1111 1000
d>>2 :"1""1"11 1110 (前两位补"1" ,后两位"0"给舍弃)

结果:-2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值