我不知道为什么,我尝试了在堆栈中找到的所有实现,但每个实现都有这种奇怪的行为。
我的目标是:给定一个小数,将其更改为二进制并在给定位置值检索一位。
假设我得到了这个二进制数,即十进制 255:
11111111
很好用这个:
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))//other test
#define NCHECK_BIT(int, pos) (!! int & (1 << pos))
unsigned char* REG_SW ;
//from int to binary
unsigned int int_to_int(unsigned int k) {
return (k == 0 || k == 1 ? k : ((k % 2) + 10 * int_to_int(k / 2)));
}
int checkBitPosition(){
REG_SW = (unsigned char*) 0x300111;
return NCHECK_BIT(int_to_int(REG_SW [0]),6)==false?1:0 ;
}
如果该位在第六位为 0,但在第二位(还有其他一些......实际上!!),它会返回 true,所以结果是不可预测的......我没有得到结果背后的逻辑。 我认为 int 到二进制转换器工作得很好,因为我正在打印它,并且它始终是从我给出的 int 中获取的正确二进制文件。
有人可以帮我吗?
提前致谢!
最佳答案
您首先将数字转换为其二进制格式,然后使用宏检查该二进制格式。这是错误的,因为您的宏将检查结果数字(而不是原始数字)中的位位置,即,
首先您的数字= 10
,二进制格式为1010
现在要检查您必须传递 10
作为宏参数的位,而不是 1010
如果将二进制表示形式 1010
传递给宏,则将检查数字 1010
的二进制表示形式是否为 pos
,而不是 10 .
关于用C语言检查二进制文件中特定位置的位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658149/