可以说我有一个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. 如何从ListView中的位置int获取TextView的值?
- 4. 如何从Iterator获取int []?
- 5. 获取最左边的8位
- 6. 这个代码如何获得最低位的位置?
- 7. 如何在ios 8中获取当前位置lat?
- 8. 如何获取MAX int但排除特定的int?
- 9. 位操作,以获得32位的int
- 10. 如何从微调器获取int值
- 11. 当以低完整性级别运行时,如何获取%temp%\ Low的位置
- 12. 如何使用C#将int转换为仅使用低4位的字节?
- 13. 如何获取位图
- 14. 如何获取位置--php
- 15. 如何获取Windows 8 Live ID
- 16. 如何在Node.js中获取UTF-8?
- 17. 如何从int **快速获取一维int数组?
- 18. 如何从onActivityResult(int requestCode,int resultCode,Intent数据)获取结果?
- 19. char *指向一个int值,如何获取int值?
- 20. 如何从指针读取64位到8位值
- 21. 在GCC中获取指针的低16位编译时间
- 22. 如何读取Linux中的低级别鼠标点击位置。
- 23. 16位的int VS 32位的int和64位INT
- 24. 获取INT收集
- 25. 获取int值EditText
- 26. 在python中将16位int分成两个8位整数
- 27. 从mysql中的int列中获取设置位的索引
- 28. 获取int中使用的位的长度
- 29. 从edittext获取int的值
- 30. 获取枚举的INT值[]
第一位表示“0”位还是“第1位”? – 2014-08-22 16:54:46