按位或在这里用于什么? descriptor=limit&0x000F0000; 描述符|=(标志>16)&0x000000FF; 描述符|=基&0xFF000000;

按位或在这里用于什么? descriptor=limit&0x000F0000; 描述符|=(标志>16)&0x000000FF; 描述符|=基&0xFF000000;,c,bit-manipulation,bitwise-operators,bitwise-and,bitwise-or,C,Bit Manipulation,Bitwise Operators,Bitwise And,Bitwise Or,我理解and操作用于屏蔽某些位的事实。但这里使用的是什么或操作???请详细说明。 这是创建全局描述符表代码的一部分。这里使用的=“code>基本上是以下内容的缩写 descriptor = limit & 0x000F0000; descriptor |= (flag << 8) & 0x00F0FF00; descriptor |= (base >> 16) & 0x000000FF;

我理解and操作用于屏蔽某些位的事实。但这里使用的是什么或操作???请详细说明。

这是创建全局描述符表代码的一部分。

这里使用的
=“code>基本上是以下内容的缩写

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

descriptor=destriptor |((flag这里使用的
|=
基本上是以下内容的缩写

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

descriptor=destriptor |((flag如果只看一个位,真值表由

descriptor = destriptor | ((flag <<  8) & 0x00F0FF00);
因此,按位or设置一位,当且仅当该位在至少一个操作数中设置时


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

假设有两个变量的二进制表示是

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
将它们与按位or组合时,将收集在变量中设置的所有位。因此结果为

001101
011001

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

因此,让我们有一个非常简单的示例,其中一个通用集有两个成员。让我们调用变量,
controlState
。位0表示visible属性,位1表示enabled属性。因此,您可以这样定义标志

011101
然后您可以像这样构建
controlState
变量:

const int visibleFlag = 1; // 01 in binary
const int enabledFlag = 2; // 10 in binary
int controlState = 0; // empty set
if (isVisible) 
    controlState |= visibleFlag;
if (isEnabled)
    controlState |= enabledFlag;
descriptor = descriptor | (flag <<  8) & 0x00F0FF00;  
如果您不知道是否设置了某个特定位,则会变得更有趣。因此,您可以确保将可见位设置为如下所示:

const int visibleFlag = 1; // 01 in binary
const int enabledFlag = 2; // 10 in binary
int controlState = 0; // empty set
if (isVisible) 
    controlState |= visibleFlag;
if (isEnabled)
    controlState |= enabledFlag;
descriptor = descriptor | (flag <<  8) & 0x00F0FF00;  
controlState
的原始值是否包含该标志并不重要。此操作后,将确定设置该标志,并且不会更改其他标志


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

controlState = ...; // could set visible flag, or not ...
controlState |= visibleFlag;
初始化
描述符
。然后

descriptor  =  limit       & 0x000F0000;        

descriptor |=(flag如果只看一个位,真值表由

descriptor = destriptor | ((flag <<  8) & 0x00F0FF00);
因此,按位or设置一位,当且仅当该位在至少一个操作数中设置时


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

假设有两个变量的二进制表示是

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
将它们与按位or组合时,将收集在变量中设置的所有位。因此结果为

001101
011001

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

因此,让我们有一个非常简单的示例,其中一个通用集有两个成员。让我们调用变量,
controlState
。位0表示visible属性,位1表示enabled属性。因此,您可以这样定义标志

011101
然后您可以像这样构建
controlState
变量:

const int visibleFlag = 1; // 01 in binary
const int enabledFlag = 2; // 10 in binary
int controlState = 0; // empty set
if (isVisible) 
    controlState |= visibleFlag;
if (isEnabled)
    controlState |= enabledFlag;
descriptor = descriptor | (flag <<  8) & 0x00F0FF00;  
如果您不知道是否设置了某个特定位,则会变得更有趣。因此,您可以确保将可见位设置为如下所示:

const int visibleFlag = 1; // 01 in binary
const int enabledFlag = 2; // 10 in binary
int controlState = 0; // empty set
if (isVisible) 
    controlState |= visibleFlag;
if (isEnabled)
    controlState |= enabledFlag;
descriptor = descriptor | (flag <<  8) & 0x00F0FF00;  
controlState
的原始值是否包含该标志并不重要。此操作后,将确定设置该标志,并且不会更改其他标志


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

controlState = ...; // could set visible flag, or not ...
controlState |= visibleFlag;
初始化
描述符
。然后

descriptor  =  limit       & 0x000F0000;        

描述符|=(按位标记或
描述符
运算符(如果在任一操作数中存在位,则复制一位),用于将
描述符
=
的右运算符进行O型运算,并将结果存储到
描述符
。它相当于

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

descriptor=descriptor |(按位标记或
descriptor
运算符(如果在任一操作数中存在一位,则复制一位))用于将
描述符
=
的右运算符进行ORing,并将结果存储到
描述符
。它相当于

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

descriptor=descriptor |(flag
descriptor
是一组以位域形式打包在一起的值。此代码由四个值(
限制
flag
)和
的两部分组成)。每一步都是将值移动到校正位位置,然后使用掩码进行and运算,以确保位不会溢出到其他位置。
a |=B
运算符扩展到
a=a | B
,并将所有单独的结果合并在一起。这也可以使用带位字段的
struct
完成,尽管根据HAP的可移植性较差。

描述符
是一组以位域形式打包在一起的值。此代码由四个值(
限制
标志
,以及
的两部分)组成。每一步都是将值移动到校正位位置,然后使用掩码进行and运算,以确保位不会溢出到其他位置。
a |=B
运算符扩展到
a=a | B
,并将所有单独的结果合并在一起。这也可以使用带位字段的
struct
完成,尽管根据haps的可移植性较差。

您展示的代码所做的是通过从其他布尔表达式中选择描述符的不同部分来构造描述符

请注意,
(flag>16)
base
的常量是and