簡體   English   中英

如何檢查C#中是否設置了特定位

[英]How to check if a particular bit is set in C#

在C#中,我有一個32位值,我將其存儲在int中。 我需要查看是否設置了特定位。 我需要的位是0x00010000

我想出了這個解決方案:

這是我正在尋找的:

Hex:       0    0    0    1     0    0    0    0    0 
Binary   0000|0000|0000|0001|0000|0000|0000|0000|0000

所以我右移16號,這會給我:

Hex:       0    0    0    0     0    0    0    0    1
Binary   0000|0000|0000|0000|0000|0000|0000|0000|0001

我然后向左移3,這會給我:

Hex:       0    0    0    0     0    0    0    0   8 
Binary   0000|0000|0000|0000|0000|0000|0000|0000|1000

然后我將我的32位值設置為一個字節,看看它是否等於8。

所以我的代碼將是這樣的:

int value = 0x102F1032;
value = value >> 16;
byte bits = (byte)value << 3;
bits == 8 ? true : false;

有沒有更簡單的方法來檢查是否在沒有所有移位的情況下設置了特定位?

您可以使用按位&運算符:

int value = 0x102F1032;
int checkBit = 0x00010000;
bool hasBit = (value & checkBit) == checkBit;

它比那容易得多。 只需像這樣使用按位AND運算符

(value & 0x00010000) != 0

您可以像這樣檢查:

bool bitSet = (value & 0x10000) == 0x10000;

如果你不喜歡位掩碼方法:

int data = 0;

var bits = new BitArray(new int[] { data });

bits.Get(21);

(我可能得錯了,你找的不是21)

對於只有32位的情況,這可能有點濫用,但是如果你需要使用更長位的數組,這就更清楚了。

你可以做一個按位AND。

int result = yourByte & 16;
if (result != 0)
{
    // do what you need to when that bit is set
}

使用按位和運算符&

return (value & 0x100000) != 0;

你可以說:

if( (number & 0x00010000 ) != 0 )
{
  //the bit is set...
}
int someInt = 8;
int BitToTest = 3;
bool isSet = (someInt & (1 << BitToTest)) != 0;

如果答案非零,則設置了移位值,設置位。 如果你正在做一個很多位使用一個常量(1 << BitToTest),如果很多但不同的位,一個靜態數組來查找2 ^ BitToTest。

此外,但也許不是更好,您可以使用BitVector32結構。

int value =  0x102F1032;
var vector = new BitVector32(value);
return vector[0x1000]; //true

暫無
暫無

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

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