Linux C 编程教程第 13 部分 - 位运算符(基础)Linux C 编程教程第 13 部分 - 位运算符(基础)Linux C 编程教程第 13 部分 - 位运算符(基础)Linux C 编程教程第 13 部分 - 位运算符(基础)
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

Linux C 编程教程第 13 部分 - 位运算符(基础)

在此页

  1. 结论

到目前为止,在这个正在进行的 C 编程教程系列中,我们已经讨论了多种运算符,例如算术运算符、逻辑运算符、关系运算符和赋值运算符。然而,还有另一种运算符是 C 编程语言不可或缺的一部分。我们正在谈论按位运算符。

您现在可能已经知道,您在 C 程序中使用的每个变量都以字节的形式存储在内存中。此外,这些字节各自被分成8位。位可以是 1 或 0。例如,如果 a 是一个值为 1 的短整数(占用两个字节),那么在内存级别上,a 的表示方式如下:

00000000 00000001

类似地,如果 b 是 3,那么它在内存中的表示方式如下:

00000000 00000011

注意:前往此处了解有关整数在内存中如何以位的形式表示的更多信息。

将要在这里讨论的按位运算符处理这些位。让我们从按位与运算符开始,它由 & 表示。它采用两个等长的二进制表示并对相应的位执行逻辑与运算。

在逻辑与运算中,只有当对应的两个位都为 1 时,结果才为 1。否则,结果为 0。因此,如果执行以下操作:

a & b

其中 a 为 1,b 为 3(如本教程开头所述),则该操作产生以下结果:

00000000 00000001

这是因为如果您对 a 和 b 的位表示进行逻辑与操作,则只有最右边的位保留为 1,而所有其他位都变为 0。以整数(或更准确地说,十进制)形式,该位表示结果为 1。

这是此操作的代码:

#include <stdio.h>

int main()
{
short a = 1;
short b = 3;
printf("a & b = %i", a&b);

return 0;
}

这是这段代码的输出:

a & b = 1

就像 & 一样,还有其他位运算符。完整列表如下:

&  - AND 
| - inclusive OR
^ - exclusive OR
<< - left shift
>> - right shift
~ - one's complement or NOT

OR 运算符 (|) 对其操作数的相应位执行逻辑包含或运算 - 如果任何位为 1,则结果位也为 1,否则结果位为 0。异或(或 XOR)运算符工作得很好很像 OR 运算符,只是如果两个位都为 0 或 1,则结果位为 0。

左移运算符将第二个操作数指定的位数移位。例如,以下行确保 a 的位向左移动 3 次。

a << 3

如果 a 是值为 1 的短整数,那么它的位表示类似于:

00000000 00000001

但是经过左移操作后,它的位表示就变成了:

00000000 00001000

所以你可以看到,每个位移动 3 次,将值为 1 的位带到第四个位置(并用 0 填充空位)。所以现在,a 的十进制值变成了 8。

在同一行中,右移运算符 (>>) 将位右移。最后,取反运算符或非运算符——这是此列表中唯一的一元运算符——反转操作数的所有位(或对每一位执行逻辑非)。例如,如果 a 是一个单字节变量,在内存中的表示方式如下:

11111110

然后,~a 会成功:

00000001

请注意,按位运算符只能应用于 char、short、int 和 long 变量(有符号和无符号)。

结论

我希望我能够弄清楚按位运算符的基本概念。当然,还有一些场景,例如在有符号值上应用移位运算符,以及我们没有在此处介绍的按位运算符的实际示例。但这些肯定会在即将推出的教程中涵盖。

©2015-2025 艾丽卡 support@alaica.com