所以我有一個16位數字。假定它的變量名稱是Bits。我想讓比特[2:0] = 001,100和000,而不改變別的。我不知道該怎麼做,因爲我能想到的只是ORing我想成爲1和1的位,但我不知道如何清除其他位,使它們爲0.如果有人有建議,我會很感激。謝謝!在C中更改int中的位?
回答
要清除某些位,&
與要清零的位相反。然後你可以在你想要的位上輸入|
。
在這種情況下,你要零出低三位(111
二進制或十進制7
),所以我們&
與~7
才能徹底清除這些位。
Bits = (Bits & ~7) | 1; // set lower three bits of Bits to 001
它可能有助於解釋'〜7'是什麼情況,以防被詢問者不知道按位運算符。 – 2013-04-10 01:07:48
@ Gabriel:完成。 – nneonneo 2013-04-10 01:09:40
哦!我不知道你可以這樣做......謝謝! – user2253332 2013-04-10 01:17:38
union
結構允許指定一個具有可變的比特數和單獨地尋址一個更大的變量的每一個比特的能力。
union {
short value;
struct {
unsigned char bit0 : 1;
unsigned char bit1 : 1;
unsigned char bit2 : 1;
unsigned char bit3 : 1;
unsigned char bit4 : 1;
unsigned char bit5 : 1;
unsigned char bit6 : 1;
unsigned char bit7 : 1;
unsigned char bit8 : 1;
unsigned char bit9 : 1;
unsigned char bit10 : 1;
unsigned char bit11 : 1;
unsigned char bit12 : 1;
unsigned char bit13 : 1;
unsigned char bit14 : 1;
unsigned char bit15 : 1;
} bits;
} var;
現在你有一個名爲var
持有的16位整數,它可以通過var.value
引用變量,你必須通過var.bits.bit15
acessing var.bits.bit0
訪問該變量的每個單獨的位。
通過設置var.value = 0;
所有位也被設置爲0。通過設置var.bits.bit0 = 1;
,您可以自動將var.value
的值更改爲0x8000
,或者如二進制1000000000000000
所示。
如果你的目的是改變只有最後3位,可以簡化結構,以更多的東西是這樣的:
union {
short value;
struct {
unsigned short header : 13;
unsigned char bit13 : 1;
unsigned char bit14 : 1;
unsigned char bit15 : 1;
} bits;
} var;
現在你有var.bits.header
,這是一個13位的變量,而其他3 1位變量,你可以玩。
但是請注意C++不支持這種結構,所以爲了獲得最佳的C到C++可移植性,您可能更願意使用bitwise operations,而不是像@nneonneo所建議的那樣。
- 1. 如何在MSVWD2010 Express c中的viewbag中更改int int#
- 2. 在C++中使用按位運算符將4個字符更改爲int
- 3. 負數:如何將signed int中的符號位更改爲0?
- 4. 在C++中修改一個const int
- 5. 在Java 1.7中更改LocateRegistry.createRegistry(int port)?
- 6. 在Python中從int更改爲int32
- 7. 在Python中將str更改爲int
- 8. 在C++中更改面板中自動滾動條的位置
- 9. 在Javascript中更改單位
- 10. 在mixin中更改單位
- 11. 如何在此while循環中將int更改爲double,C
- 12. int變量在向量(C++)中被推回後更改值
- 13. 在C中將字符串輸入更改爲int#
- 14. 如何在C++中將字符串更改爲int數字?
- 15. 在大int中的進位數/填充在C中
- 16. 將無符號16位int轉換爲C#中有符號16位int int#
- 17. 更改與按鈕中的int值
- 18. 如何更改塊中的int值?
- 19. 在C#中更改系統日期時間.Date已更改,但TIme未在64位Windows Server 2008中更改
- 20. 更改數組中的位
- 21. int數組在C/C++中
- 22. 在C中計算比O(n)更快的32位int的階乘(mod prime)?
- 23. 在C#中更改DatagridViewComboboxCell值
- 24. 在C#中更改編碼?
- 25. 在C#中更改FSharpList
- 26. 在C#中更改字體?
- 27. 在Visual C++ 2008中更改ncb文件的位置(9.0)
- 28. 在c#套接字中更改收到的文件位置
- 29. 在c#中更改窗體窗體的位置?
- 30. 在窗口中更改GTK標籤的位置 - C
[Shift運營商](http://en.wikipedia.org/wiki/Bitwise_operation#Shifts_in_C.2C_C.2B.2B.2C_C.23) – Anthony 2013-04-10 01:02:27
首先,它不會被稱爲「位」,它會被稱爲「位」。 – 2013-04-10 01:02:56
http://en.wikipedia.org/wiki/Bitwise_operations_in_C – 2013-04-10 01:03:17