深入理解位运算

一:位运算的由来

       位运算起源于C语言的低级操作,所谓低级操作是因为位运算的操作对象是二进制位,是计算机唯一能识别的一种数制,故这种低级操作对计算机来说是非常简单直接,友好高效的。

二:位运算的定义

       程序中所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中对应的二进制位进行(+、--、*、/)操作。

三:位运算符的分类

        (一)  位逻辑运算符

               1:位与(&)——两个数对应的二进制位都为1时,该位结果为1否则为0

               2:位或(|)——两个数对应的二进制位只要有1,该位结果为1,否则为0

               3:位异或(^)——两个数对应的二进制位相异(不一样)时,该位结果为1,否则为0

               4:  取反(~)——对数据对应的每个二进制位取反,即1变成0,0变成1

下面用图表解释一下

                       

ABA&BA|BA^B~A~B
0000011
0101110
1001101
1111000

从以上运算可以看出:

                      位与运算时:A与B同为1时其运算结果才为1,其余情况结果均为0

                      位或运算时:A与B之中只要有一个为1,其运算结果就为1,其余情况结果为0

                      位异或运算时:A与B两数取值相反时其运算结果为1,其余情况结果为0

                      取反运算时:对A取反时,1变成0,0变成1 .同理对B取反也是1变成0,0变成1.

          当然A与B代表的不仅仅是一个数0或1,而是代表一串0和1组成的二进制序列,这些二进制序列可代表int类型的十进制整数

    (二)  位移运算符

                1:左移位(<<)——高位溢出舍弃,低位补0-----------左移位一位,相当于乘以2

                2:右移位 (>>)——低位溢出舍弃,高位补0----------右移位一位,相当于以除2

             

       如下例:           

                                    十进制      ——对应——       二进制

                                        4                                         100

                                        8                                         1000

                               

高位溢出00000100         4      左位移
     000001000
低位补0
00001000         8左移位一位,相当于乘以2
   
000001 00      4   右移位
000000100
高位补0

低位溢出
000000 0     2右移位一位,相当于除以2   

下面用代码块演示一下:

                         

>>> print(4<<1)  #左移位一位相当于乘以2
8
>>> print(4>>1)  #右移位一位相当于除以2
2

         

四:位运算符优先级      

                 位运算优先级从高到低依次为:取反(~)、左移位(<<)、右移位(>>)、无符号右一(>>>)、位与(&)、位异或(^)、位或(|)

五:位运算的优缺点

          优点:直接操控二进制时使用,节约内存,使程序运行更快

                     可靠性高。二进制中只使用0和1两个数字,传输和处理时不易出错。

                     运算规则简单。

         缺点:用二进制表示信息时,位数太多,太繁琐。

                    难于记忆,可读性差。

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSup{A}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值