Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
代码如下:
我陷入了困境或无法解决的问题。我手工进行的逐步计算将结果放置在18x的0x12处,但是我尝试使用2个编译器将打印输出始终为0x18。
这是为什么?
我计算出的最后一步是8+ 10 = 18?
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
代码如下:
int main() {
// your code goes here
int val = 0x18;
int val1 = val&0xf + ((val>>4)&0xf)*10;
printf("%d %d\n",val1,val1&0x3f);
return 0;
}
我陷入了困境或无法解决的问题。我手工进行的逐步计算将结果放置在18x的0x12处,但是我尝试使用2个编译器将打印输出始终为0x18。
这是为什么?
我计算出的最后一步是8+ 10 = 18?
最佳答案
int val1 = (val&0xf) + ((val>>4)&0xf)*10
在val&0xf
周围添加括号,有关详细信息,请检查c运算符的优先级。
如果要十六进制格式,请使用printf("%x", ...)
http://en.cppreference.com/w/c/language/operator_precedence
关于c - 为什么结果是0x18而不是0x12? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48294924/
10-08 22:24