C 設定和獲取乙個位元組的某一位的值的方法

2022-02-22 19:08:36 字數 2064 閱讀 9338

自己工作中遇到需要對單位元組的高位、低位進行賦值,即乙個位元組byte,想要給每一位都賦值,這個值是動態來的,是0或是1。

一、設定

方法code:

///

/// 設定某一位的值

///

///

/// 要設定的位, 值從低到高為 1-8

/// 要設定的值 true / false

///

byte set_bit(byte data, int index, bool flag)

呼叫code:

byte s = set_bit(8, 8, true);

結果:s 的值為 136, 結果正確。

二、獲取值

獲取乙個位元組中的每一位的值,需要分別與128 64 32 16 8 4 2 1相與&運算

假設位元組為byte1 

bit8 = byte1 & 128 == 128 ? 1 : 0; 

bit7 = byte1 & 64 == 64 ? 1 : 0; 

bit6 = byte1 & 32 == 32 ? 1 : 0; 

bit5 = byte1 & 16 == 16 ? 1 : 0; 

bit4 = byte1 & 8 == 8 ? 1 : 0; 

bit3 = byte1 & 4 == 4 ? 1 : 0; 

bit2 = byte1 & 2 == 2 ? 1 : 0; 

bit1 = byte1 & 1 == 1 ? 1 : 0;

另外,收集到網路上的其他資料:

引用:你好,感謝你閱讀此帖.

今天我們要討論的是在c#中如何獲取乙個數值中的某一位的資料,比如乙個byte型資料8,它的二進位制表示為00001000(高位到低位),那我應該怎樣獲取它的第3位的值1呢?

我的想法是這樣的,先把第3位的值右移7-3=4位,然後再右移7位,最後取這個值,這樣就把第3位前後的值都變為0了,最後輸出它的值為1.下面是我寫的乙個方法:

c# code

/// /// 獲取資料中某一位的值

///

/// 傳入的資料型別,可換成其它資料型別,比如int

/// 要獲取的第幾位的序號,從0開始

/// 返回值為-1表示獲取值失敗

private int getbitvalue(byte input,int index)

//左移到最高位

int value = input << (sizeof(byte) - 1 - index);

//右移到最低位

value = value >> (sizeof(byte) - 1);

return value;

}

回覆:想看那一位是1就把第幾位設定為1,其他設定為0,同input進行與操作,返回,大於0則是1,==0則是0.

回覆://index從0開始 

//獲取取第index位 

public static int getbit(byte b, int index)

//將第index位設為1 

public static byte setbit(byte b, int index)

//將第index位設為0 

public static byte clearbit(byte b, int index)

//將第index位取反 

public static byte reversebit(byte b, int index)

回覆:private static int getbitvalue(byte input, int index)

回覆:c# code

//每8位為乙個位元組

private const int bitcout = 8;

///查詢物件記憶體第index位值

static int getvalueofindex(object obj, int index)

for (int i = 0; i < 32; i++)

console.writeline(15.0f + " : " + getvalueofindex(13, 28));

怎麼把位域合成乙個位元組 位域 bit field

一 位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾 個不同的區域,並說明每...

ACM節約每乙個位元組 C 實現

節約每乙個位元組 description john在做乙個專案,專案對儲存容量有著近乎苛刻的要求,為此john需要對一些東西進行壓縮儲存。john的第乙個問題就是一大堆的字串,儲存它們太佔地方了,為此他想了乙個辦法 如果字串具有相同的字尾,那麼就把這麼字串的相同字尾和在一起,這樣就能節約一點空間了。...

求乙個位元組中,1 0的個數

真是很極端的做法啊 宋寶華 21cnbao 21cn.com 軟體報 問題 對於乙個位元組 8bit 的資料,求其中 1 的個數,要求演算法的執行效率盡可能地高。分析 作為一道著名外企的面試題,看似簡單,實則可以看出乙個程式設計師的基本功底的紮實程度。你或許已經 想到很多方法,譬如除 餘操作,位操作...