可以說我有一個int變量n = 8。在大多數機器上這將是一個32位的值。我怎樣才能得到這個二進制的低8位(最低字節)?另外我怎樣才能訪問每一個位,找出它是什麼? 我的問題是有關至C如何獲取int的低8位?
19
A
回答
30
unsigned n = 8;
unsigned low8bits = n & 0xFF;
注意的幾件事情:
- 對於位運算,始終使用
unsigned
類型 - 位可以使用二進制掩蔽與
&
操作 - 要進入低的數字提取8位掩碼是
0xFF
,因爲在二進制中它有低8位打開,其餘0位數字的低8位8 ... 8(想想了一會兒)
要訪問一些特定的比特,說k
個位:
unsigned n = ...;
unsigned kthbit = (1 << k) & n;
現在,kthbit
會如果0的n
的k
第i位是0,並且一些正數(2**k
)如果n
的k
個位爲1
15
使用按位算術屏蔽掉最低8位:
unsigned char c = (x & 0xFF);
要訪問的第n個最低位時,方程是(x & (1 << n))
(零n表示至少顯著位) 。零的結果表示該位清零,而非零表示該位被置位。
2
可以Ť EST如果一個特定的位被設置在使用< <和&,即數:如果第四位被設置或不
if (num & (1<<3)) ...
將測試。
同樣,您可以通過使用&以及僅設置最低8位的數字(即num & 255
或num & 0xFF
(十六進制))來提取最低8位(作爲整數)。
7
最好的方法是使用具有適當值的位邏輯運算符&。
所以對於低8位:
n & 0xFF; /* 0xFF == all the lower 8 bits set */
或者作爲一般規則:
n & ((1<<8)-1) /* generate 0x100 then subtract 1, thus 0xFF */
您可以用移位操作結合起來,得到一個特定的位:
(n & (1<<3))>>3;
/* will give the value of the 3rd bit - note the >>3 is just to make the value either 0, or 1, not 0 or non-0 */
相關問題
- 1. 從int變量中獲取兩個低位字節
- 2. 獲取低階n位
- 3. 8位的int VS在32位architechture 32位的int(GCC)
- 4. 如何從長的N位獲取int和cout(並獲得可讀的int)?
- 5. 如何從Iterator獲取int []?
- 6. 如何從NSString獲取int?
- 7. 如何從ListView中的位置int獲取TextView的值?
- 8. 獲取一個int的位長爲
- 9. 將8位int轉換爲32位
- 10. 如何從android中的onSuggestionClick(int position)中獲取位置值
- 11. 獲取最左邊的8位
- 12. 如何在C++中設置short int的高位和低位字節
- 13. 使用int函數取整爲最低有效位數
- 14. 這個代碼如何獲得最低位的位置?
- 15. 從字符串獲取int位置PHP
- 16. 我如何從int中獲取單個位?
- 17. MySQL的最低INT
- 18. 如何在ios 8中獲取當前位置lat?
- 19. 如何獲得32位int的前11位與ctypes
- 20. 如何獲得int的32位二進制補碼位模式?
- 21. 如何獲取位的位置
- 22. 如何獲取MAX int但排除特定的int?
- 23. 位操作,以獲得32位的int
- 24. 如何從XML獲取值到int
- 25. 如何獲取JTextField爲int並返回?
- 26. 如何從微調器獲取int值
- 27. 當以低完整性級別運行時,如何獲取%temp%\ Low的位置
- 28. 如何獲取行位置?
- 29. 如何獲取位圖
- 30. 如何獲取位置--php
第一位表示「0」位還是「第1位」? – 2014-08-22 16:54:46