gpt4 book ai didi

c - 这里按位或用什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:17 25 4
gpt4 key购买 nike

descriptor  =  limit       & 0x000F0000;        
descriptor |= (flag << 8) & 0x00F0FF00;
descriptor |= (base >> 16) & 0x000000FF;
descriptor |= base & 0xFF000000;

我理解了 and 操作用于屏蔽某些位的事实。但是这里用的OR操作是干嘛的???请详细说明。
这是创建全局描述符表的代码的一部分。

最佳答案

如果只看一位,真值表为

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1

因此,当且仅当该位至少在一个操作数中设置时,按位或设置位。


当您使用按位或对多于一个位的变量使用时,上述真值表将以按位方式应用。

因此,假设您有两个变量,其二进制表示为

001101
011001

当您将它们与按位或组合时,您收集了在 either 变量中设置的所有位。所以结果是

011101

按位或运算符通常用于将新标志添加到一组位标志中。该值用于表示数学集。每个位都被分配了一个特定的含义,即与通用集的一个成员相关联。当该位为 1 时,该成员包含在集合中,当该位为 0 时,关联成员不在集合中。

那么,让我们举一个非常简单的例子,其中有两个成员的通用集。让我们调用变量,controlState .位 0 表示可见属性,位 1 表示启用属性。所以,你可以像这样定义标志

const int visibleFlag = 1; // 01 in binary
const int enabledFlag = 2; // 10 in binary

然后你可以构建controlState像这样的变量:

int controlState = 0; // empty set
if (isVisible)
controlState |= visibleFlag;
if (isEnabled)
controlState |= enabledFlag;

如果您不知道是否设置了特定位,它会变得更有趣。因此,您可以确保可见位设置如下:

controlState = ...; // could set visible flag, or not ...
controlState |= visibleFlag;

controlState 的原始值是不是无关紧要是否包括标志。执行此操作后,它将被确定,并且不会更改其他标志。


这就是您的代码示例中发生的情况。所以,

descriptor  =  limit       & 0x000F0000;        

初始化descriptor .然后

descriptor |= (flag <<  8) & 0x00F0FF00;

添加 (flag << 8) & 0x00F0FF00 .等等。

关于c - 这里按位或用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com