需要了解在应用程序中如何选择下面的位值

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_csmInfo_csmNpli_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_csmInfo_c 以及 smNpli_cpageState 还可能包含此时 "on" 的其他 bits/switches。