c语言操作符详解(二)

发布时间:2024年01月18日

本节操作符类型

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

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

?位操作符

按位与?

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

按位或?

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

按位异或

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

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

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

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

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

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

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

移位操作符

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

左移位

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

下面是运用实例:

右移位?

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

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

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

例题

接下来看几个例题。

一:?

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

二?

下面是解题过程。?

?

文章来源:https://blog.csdn.net/strive_mianyang/article/details/135639936
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。