c/c++位运算及其应用

位运算就是把其他进制的整数,换算成二进制再进行运算。主要有 &, |, ,  ^ , ~, <<, >> 。注意,位运算的优先度高于逻辑运算的&&,||,!的。

如何求其进制的二进制

我在上一篇已经总结过了,这里就不在重复了,具体就是用余数定理分解。

 链接地址:https://blog.csdn.net/qq_40140790/article/details/100083236

那么负数的二进制是怎么样的呢? 其实也简单。先采用余数定理分解得出其正数的二进制值,再采用它的补码正数的补码和原码相同,负数的补码是该数的绝对值的二进制形式,按位取反后再加1)(注意,最高位为符号为,负数为1,正数为0)显示,简单来说就是 “ 先按正数转换,然后取反加1。”

例如:

要将十进制的-10用二进制表示,先将10用二进制表示:

-10

0000 0000 0000 1010

取反:

11 1111 1111 010111

加1:

1111 1111 1111 0110

所以,-10的二进制表示就是:1111 1111 1111 0110

 

按位与运算符(&)
参加运算的两个数,按二进制位进行“与”运算。

运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)

即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。

例:3 &5  即 0000 0011 & 0000 0101 = 0000 0001 ,所以 3 & 5的值为1。

 

按位或运算符(|)
参加运算的两个数,按二进制位进行“或”运算。

运算规则:参加运算的两个数只要两个数中的一个为1,结果就为1。

即  0 | 0= 0 ,  1 | 0= 1  , 0 | 1= 1  ,  1 | 1= 1 。

例:2 | 4 即 0000 0010 | 0000 0100 = 0000 0110 ,所以2 | 4的值为 6 。

 

异或运算符(^)
参加运算的两个数,按二进制位进行“异或”运算。

运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

即 0 ^ 0=0  , 0 ^ 1= 1  , 1 ^ 0= 1  , 1 ^ 1= 0 。

例: 2 ^ 4 即 0000 0010 ^ 0000 0100 =0000 0110 ,所以 2 ^ 4 的值为6 。

最后说一下我们最关心的左右移问题。

 左移(<<)

   参加运算的两个数,换算为二进制后,进行左移运算,用来将一个数各二进制位全部向左移动若干位。

1

2

3

4

5

对10左移2位(就相当于在右边加2个0):

0000 0000 0000 1010

--------------------

0000 0000 0010 1000 向左移动,右边的2位补0,左边的2位舍去

所以:10 << 2 = 0000 0000 0010 1000 = 40

   注意,观察可以发现,左移一位的结果就是原值乘2,左移两位的结果就是原值乘4。规律就是乘于2的n次方。

   右移(>>)

   参加运算的两个数,换算为二进制后,进行右移运算,用来将一个数各二进制位全部向右移动若干位。

1

2

3

4

5

对10右移2位(就相当于在左边加2个0):

0000 0000 0000 1010

--------------------

0000 0000 0000 0010 向右移动,左边的2位补0,右边的2位舍去

所以:10 >> 2 = 0000 0000 0000 0010 = 2

   注意,观察可取整。以发现,右移一位的结果就是原值除2,左移两位的结果就是原值除4,规律就是除于2的n次方。注意哦,除了以后没有小数位的,都是取整

位运算的实用小技巧

https://blog.csdn.net/iov3Rain/article/details/70238996

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值