为什么结果是0x18而不是0x12?

时间:2018-01-17 06:34:00

标签: c

代码如下:

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;
}

我陷入了一个循环或某些我无法解决的问题。我的手工制作,一步一步计算将结果置于0x12,即18D,但我尝试了2个编译器,打印输出始终为0x18。

为什么?

我计算的最后一步是8 + 10 = 18?

1 个答案:

答案 0 :(得分:2)

int val1 = (val&0xf) + ((val>>4)&0xf)*10

val&0xf周围添加括号,检查c运算符优先级以获取详细信息。

如果您想要十六进制格式,请使用printf("%x", ...)

  1. http://en.cppreference.com/w/c/language/operator_precedence