需要了解在应用程序中如何选择下面的位值
Need to understand how are the bit values chosen below in the application
谁能解释一下下面代码中的位值是如何决定的 -
{code}
//Each bit represents an application for paging.
typedef uint32_t PageOrig;
static const PageOrig pageNotInitiated_c = 0x0000;
static const PageOrig smSig_c = 0x0001;
static const PageOrig smData_c = 0x0002;
static const PageOrig nwkInitDetach_c = 0x0004;
static const PageOrig cancelLoc_c = 0x0008;
static const PageOrig lcsSig_c = 0x0010;
static const PageOrig gmmInfo_c = 0x0020;
static const PageOrig msInfo_c = 0x0040;
static const PageOrig oneXRtt_c = 0x0080;
static const PageOrig sgsapCs_c = 0x0100;
static const PageOrig sgsapPs_c = 0x0200;
static const PageOrig subsOffload_c = 0x0400;
static const PageOrig ehrpd_c = 0x0800;
static const PageOrig smSgsCs_c = 0x1000;
static const PageOrig smSgsPs_c = 0x2000;
static const PageOrig onDemandPaging_c = 0x4000;
static const PageOrig slnPaging_c = 0x8000;
static const PageOrig smNpli_c = 0x10000;
static const PageOrig smsSgd_c = 0x20000;
{code}
这用作采取不同行动的指标
在您的示例中,每个常量都具有 "unsigned integer with 32 bits" 类型(或 4 个字节)。每个常量代表某种状态,或者表示是否设置了 属性 的 "switch"。当位为1时,开关打开。
例如:
pageNotInitiated_c 00000000 00000000 00000000 00000000
smData_c 00000000 00000000 00000000 00000010
msInfo_c 00000000 00000000 00000000 01000000
smNpli_c 00000000 00000001 00000000 00000000
如果要将状态 smData_c
、smInfo_c
和 smNpli_c
分配 ("switch on") 到 pageState
,您可以这样做:
uint32_t pageState = smData_c | msInfo_c | smNpli_c ;
|
表示按位Or
.
结果是 00000000 00000001 00000000 01000010
.
如果你想测试 pageState
是否有一个特定的开关或 属性 设置 on
,你这样做:
if (pageState && smData_c && smInfo_c && smNpli_c)
{ ... }
&&
表示合乎逻辑的And
。此 if
语句测试 pageState
是否包含位 smData_c
和 smInfo_c
以及 smNpli_c
。 pageState
还可能包含此时 "on" 的其他 bits/switches。
谁能解释一下下面代码中的位值是如何决定的 -
{code}
//Each bit represents an application for paging.
typedef uint32_t PageOrig;
static const PageOrig pageNotInitiated_c = 0x0000;
static const PageOrig smSig_c = 0x0001;
static const PageOrig smData_c = 0x0002;
static const PageOrig nwkInitDetach_c = 0x0004;
static const PageOrig cancelLoc_c = 0x0008;
static const PageOrig lcsSig_c = 0x0010;
static const PageOrig gmmInfo_c = 0x0020;
static const PageOrig msInfo_c = 0x0040;
static const PageOrig oneXRtt_c = 0x0080;
static const PageOrig sgsapCs_c = 0x0100;
static const PageOrig sgsapPs_c = 0x0200;
static const PageOrig subsOffload_c = 0x0400;
static const PageOrig ehrpd_c = 0x0800;
static const PageOrig smSgsCs_c = 0x1000;
static const PageOrig smSgsPs_c = 0x2000;
static const PageOrig onDemandPaging_c = 0x4000;
static const PageOrig slnPaging_c = 0x8000;
static const PageOrig smNpli_c = 0x10000;
static const PageOrig smsSgd_c = 0x20000;
{code}
这用作采取不同行动的指标
在您的示例中,每个常量都具有 "unsigned integer with 32 bits" 类型(或 4 个字节)。每个常量代表某种状态,或者表示是否设置了 属性 的 "switch"。当位为1时,开关打开。
例如:
pageNotInitiated_c 00000000 00000000 00000000 00000000
smData_c 00000000 00000000 00000000 00000010
msInfo_c 00000000 00000000 00000000 01000000
smNpli_c 00000000 00000001 00000000 00000000
如果要将状态 smData_c
、smInfo_c
和 smNpli_c
分配 ("switch on") 到 pageState
,您可以这样做:
uint32_t pageState = smData_c | msInfo_c | smNpli_c ;
|
表示按位Or
.
结果是 00000000 00000001 00000000 01000010
.
如果你想测试 pageState
是否有一个特定的开关或 属性 设置 on
,你这样做:
if (pageState && smData_c && smInfo_c && smNpli_c)
{ ... }
&&
表示合乎逻辑的And
。此 if
语句测试 pageState
是否包含位 smData_c
和 smInfo_c
以及 smNpli_c
。 pageState
还可能包含此时 "on" 的其他 bits/switches。