c语言操作符详解(二)

本节操作符类型

本节主要讨论位操作符:包括按位与&、按位或|、按位异或^。

以及讨论移位操作符:左移位<<,右移位>>

 位操作符

按位与 

按位与&,是一个双目操作符。不同于取地址&。按位与&的计算是按照二进制位进行计算的。就是将两个数的二进制的每一个相同的序列位进行计算。只有全都为1,结果才为1。有一个不是1,结果就是0。

按位或 

按位或|,同样是双目操作符。按位或|的运算法则是两个数进行或的运算,其二进制的每一个相同序列位进行运算,只要有1,就为1。全部为0,才为0。

按位异或

按位异或^, 同样是一个双目运算符。运算法则是相同为0,相异为1。

这里需要知道的是,^满足结合律,交换律 

有一个比较经典异或运用的例题,如图:

如果不运用异或来求解,这道题可以使用相加减的方法进行求解,例如:

但是这里面有一个问题,那就是如果a与b很大,当a与b相加后超过了a变量所能存储的最大范围。那么这道题就不能很好的完成交换,出现问题。

但是如果我们使用异或进行求解就不需要担心这种问题: 

这就是异或的一个运用案例。

移位操作符

移位操作符,移动的都是二进制位。且必须是整型。即将计算机中保存的整型的二进制补码进行左右移位。

左移位

内存中的二进制补码整体向左移动一位,左边超出的部分丢弃,右边补零。如:

下面是运用实例:

右移位 

右移位与左移位不同,分为算数移位与逻辑移位。

逻辑右移就是左边用零填充,右边直接丢弃。算数右移就是左边用原符号位进行填充,右边丢弃。采用 哪种右移方式主要取决于编译器,但是大部分编译器使用的是算数右移,vs2022同样采用算术右移。

其具体右移过程与左移类似,这里不加赘述。

例题

接下来看几个例题。

一: 

这里就是应用的上面的位操作符,以及我在之前写的单目操作符~的运用,下面是解题过程:

二 

下面是解题过程。 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值