Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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