說我有一個這樣的字節1010XXXX,其中的X值可以是任何東西。我想將低四位設置爲一個特定的模式,比如說1100,同時保留高四位不受影響。我如何在C中做到最快?如何設置C中某個字節的某些位而不影響其餘部分?
13
A
回答
11
您可以按位將所有這些位設置爲0,並將4位設置爲0,將所有其他位設置爲1(這是將4位設置爲1的補數)。然後你可以像平常一樣按位或按位。
即
val &= ~0xf; // Clear lower 4 bits. Note: ~0xf == 0xfffffff0
val |= lower4Bits & 0xf; // Worth anding with the 4 bits set to 1 to make sure no
// other bits are set.
33
一般:
value = (value & ~mask) | (newvalue & mask);
mask
是所有位的值被改變(其中只有)設置爲1 - 它會在你的情況下0xf。 newvalue
是一個包含這些位的新狀態的值 - 所有其他位基本上被忽略。
這適用於支持按位運算符的所有類型。
0
使用按位運算符或|當你想一個字節的位從0更改爲1
使用位運算符和&當你想從1字節的位更改爲0
例
#include <stdio.h>
int byte;
int chb;
int main() {
// Change bit 2 of byte from 0 to 1
byte = 0b10101010;
chb = 0b00000100; //0 to 1 changer byte
printf("%d\n",byte); // display current status of byte
byte = byte | chb; // perform 0 to 1 single bit changing operation
printf("%d\n",byte);
// Change bit 2 of byte back from 1 to 0
chb = 0b11111011; //1 to 0 changer byte
byte = byte & chb; // perform 1 to 0 single bit changing operation
printf("%d\n",byte);
}
也許有更好的方法,我不知道。這會幫你現在。
相關問題
- 1. 如何設置溢出隱藏,但不影響某些元素
- 2. UPDATE不影響某些行
- 3. 設置爲一個圖的某些部分,而不是其他人
- 4. 保持功能不影響數組的某些部分
- 5. 如何某些位置
- 6. 如何檢查C++中某個變量的某些位?
- 7. @ font-face onle影響某些字符
- 8. 如何減慢一種方法而不影響程序的其餘部分?
- 9. 如何在某些位置刪除字符串中的某些字符?
- 10. 如何在Android中僅屏蔽某些位圖的某些部分
- 11. 只保留某一行並刪除C#中的其餘部分
- 12. 如何設置dygraphs某些部分的顏色?
- 13. 如何翻轉C中某個字節的特定位?
- 14. 如何拆分線的某些部分?
- 15. Rails:如何顯示某些字符並解除其餘的?
- 16. 我如何在cpu和gpu中的某些部分運行某個程序的某個部分?
- 17. 取消設置和重置某些位
- 18. Android:WebView - 在WebView中打開某些URL,其餘的在外部?
- 19. 如何將一個字符串分解去除某些部分
- 20. 在某些組件上更改鼠標光標而不影響其他光標設置代碼
- 21. 如何獲取json的某些部分?
- 22. 調用某個數組的其餘部分
- 23. 部分排序其中某些數字已排序的數組
- 24. 如何獲取受Maya中某個節點影響的所有節點?
- 25. 分裂某些部分
- 26. 如何把一個字符串的某些部分到列表
- 27. 將NSManagedObject轉換爲部分故障,其中某些字段爲零且某些字段不爲零
- 28. 的這個C代碼的某些部分不適合我
- 29. 在R中,跳出某個函數而不執行其餘部分的關鍵字是什麼?
- 30. 插入字符串的某些部分
你能舉一個具體的例子嗎?假設我有:n = 1024.我想要將位從位置3更改爲7(包括從最低有效位0開始)到k = 19。結果應該是:1176.我該如何實現它?謝謝。 – dh16 2017-06-23 21:41:39