二进制的位运算

二进制的位运算有哪些?
(1).按位and运算&
(2).按位or运算|
(3).按位异或运算^
(4).取反运算~
(5).左移运算<<
(6).右移运算>>

1.and运算&

       and运算通常用于二进制取位操作。例如:n&1的结果就是取二进制的最末位,用来判断一个整数的奇偶,二进制最末位为0表示为偶数,为1表示为奇数。

       运算方法:有0得0,否则为1.

       例如:00001001

             &  00010101

             ———————

                 00000001

2.or运算|

        or运算通常用于二进制特定位赋值操作。例如:n|1的结果就是把二进制最末位强行改变成1,如果要把最末位变成0,对这个数or运算后减1即可。

       运算方法:有1得1,否则为0.

       例如:01101010

            |    00110111

                ——————

                            01111111

3.异或运算^:

        按位异或运算,对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作,操作结果是如果某位不同则该位为1,否则为0.异或运算的逆运算是它本身,即就是两次异或同一个数最后结果不变。

        异或运算可以用于简单的加密,比如说,我想对我喜欢的人说5201314,但又不想别人知道,于是双方约定一个密码19951204.  5201314^951204=5234598,我把5234598告诉他,他计算5234598^951204,得到5201314,于是他就明白了我的意思,我们就这样悄悄的传递了甜言蜜语,是不是很棒。

        运算方法:相同为0,不同为1.

        例如:10101001

              ^    01011111

                 __________

                    11110110

       此外,通过异或运算也可以很方便去实现两数的交换。

代码:a = a^b;

           b = b^a;

           a = a^b;

4.not运算~(取反运算)

         not运算是把内存中的0和1全部取反,使用not运算要区分无符号整形数和有符号整形数。

      二进制数在内存中以补码的形式存储。

      按位取反:二进制每一位取反,0变1,1变0.

      例如:a=9;则~a=?                                          a=-9;则~a=?

       先把9转为二进制:00001001                         先把-9转为二进制:10001001

                            补码:00001001                                                补码:11110111(取反加1) 

                     按位取反:11110110                                        按位取反:00001000

       转为原码:                                                       转为原码:

                         取反:10001001                                           正数补码和原码相同,

                    末位加一:10001010 (-10)                                也为00001000(8)

                          答案为-10                                                          答案为8

5.左移运算:

         左移运算就是把一个二进制数左移相对的的位数,右边用0补齐即可。

         例如:100<<2;

                     100转换成二进制数为:000001100100

                                  左移两位得到:000110010000(对应十进制数为400)

                     可以看出,左移就是100*pow(2,2),因为在后面添一个0实际上就是相当于*2.

6.右移运算:

        右移运算就是把一个二进制数右移相对的的位数,左边用0或1补齐即可。

         右移运算分为逻辑移位和算术移位,逻辑移位的话,左边根据二进制数的正负,正数用全0补齐即可,负数最高为不1,其余补0即可,算术移位就是把一个二进制数右移相对的的位数,左边用0补齐即可

          例如:逻辑移位:100>>2;

                     100转换成二进制数为:000001100100

                                  右移两位得到:000000011001(对应十进制数为25)

                     可以看出,算术左移就是100/(pow(2,2)),因为在前面添几个0实际上就是相当于除2.

                     算术移位:100>>2;

                     100转换成二进制数为:100001100100

                                              右移两位得到: 1111111111001

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值