簡體   English   中英

C ++:如何將uint32中的相關位放入uint8中?

[英]c++: how to put relevant bits from uint32 into uint8?

我有一個uint32,上面已經標記了一些位:

uint32 i = 0;
i |= (1 << 0);
i |= (1 << 5); 
i |= (1 << 13);
i |= (1 << 19);
...

我想將其轉換為uint8(通過獲取其前8位的狀態而忽略其余部分)。 顯然我可以這樣做:

uint8 j = 0;
for (int q = 0; q < 8; q++)
{
    if (i & (1 << q))
    {
        j |= (1 << q);
    }
}

但是,是否有一種花哨的按位操作,我可以使用一次轉移就將這些位轉移過來而沒有循環?

為什么不僅僅屏蔽最后8位而不是循環查看是否設置了單個位?

const unsigned char bitMask = 0xFF;
j = (i & bitMask);

請注意,盡管C ++ 14允許您立即定義二進制文字

const unsigned char bitMask = 0b1111'1111;

以上就是您所需要的。 以防萬一,如果需要獲取后續的字節位置,請使用相同的掩碼0xFF ,並確保將結果右移以獲取所需的字節值。

您只需將uint32值分配給uint8即可達到相同的結果。

int main()
{
  unsigned int i = 0x00000888;
  unsigned char j = i;
  cout<<hex<<i<<endl;
  cout<<hex<<+j<<endl;
  return 0;
}

輸出:888 88

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM