C语言位运算(简单总结)

目录

概念

    1,逻辑位运算符

             1,位与&

             2,位或|

             3,异或^

             4,按位取反~

    2,位移运算符

            1,左移

            2,右移

注意       

 位运算优先级


概念

  位运算分为2类:

    1,逻辑位运算符

             1,位与&

位与是二元运算符,进行位与运算时,转换为二进制从高到低进行运算

其运算法则为:

相同为1,不同为0

十进制       二进制       结果
12           1100
 &             &          1000(二进制) == 8(十进制)
10           1010

             2,位或|

位或是二元运算符,进行位或运算时,转换为二进制从高到低进行运算

运算法则为:

有一则一,同0则0

十进制       二进制       结果
12           1100
 |             |          1110(二进制) == 14(十进制)
10           1010

             3,异或^

异或是二元运算符,进行异或运算时,转换为二进制从高到低进行运算

运算法则为:

相同为0,不同为1

十进制       二进制       结果
12           1100
 ^             ^         0110(二进制) == 6(十进制)
10           1010

             4,按位取反~

按位取反是一元运算符,将当前数字转换为二进制后,0变1,1变0

八位整数                 ~1010
                     = 1111 0101
 要求为八位整数,但只有四位,所以要向高位取四位为0000 1010,取反后为上述结果

十六位整数               ~1010
                     =1111 1111 1111 0101


***************高位不足位数默认为0*********************************

    2,位移运算符

            1,左移

左移是二元运算符,x<<y,即将x转换为二进制,对其所有位向左偏移y位,末尾y位补零。

所以左移一位可以看作对x乘以2

           左移一位操作
0001        -->        0010   1向左移动一位,在其空缺位置补零

1(十进制)             2(十进制)
           左移俩位操作
0001        -->        0100   1向左移动俩位,在其空缺位置补零
1(十进制)               4(十进制)
           左移三位操作
0001       -->         1000    1向左移动三位,在其空缺位置补零
1(十进制)             8(十进制)

     由上可得,x左移y位,则x乘以2^y。

            2,右移

左移是二元运算符,x>>y,就是将x转换为二进制,对其所有位向右移动y位。和左移不同的是,如果x是非负数,则高位补零,如果x是负数,则高位补一。所以右移一位,可以看作对x除2,并向下取整

12(十进制)-->1100(二进制)
右移一位,由于12是非负数,所以右移一位后高位补零
1100
0110   == 6(十进制)

右移俩位
1100
0011   == 3(十进制) 
右移三位
1100
0001   == 1(十进制)//12除以2^3有余数,但要向下取整,所以为1

注意

 在计算机中,运算是使用的二进制补码。

关于正负数的原码反码补码:

正数的二进制补码为它本身,而负数却不同。负数的反码是符号位不变,其余按位取反,补码则在反码基础上+1

12(十进制)
0000 1100(二进制源码)
0000 1100(二进制反码)
0000 1100(二进制补码)


-12(十进制)
1000 1100(二进制源码)
1111 0011(二进制反码)
1111 0100(二进制补码)

       

 运算符的优先级

 

        

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三桶老飞鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值