我有这段代码,基本上是取两个整数并进行移位后相加。然而,在加法之后,我得到了一个不正确的值。
我已经找到了一种解决方法(即通过将移位后的值存储在新的无符号整数变量中并将它们相加),但我想要理解为什么这个方法没有起作用:
void change(uint8_t in[3], uint16_t out[2]){
out[0] = in[0]<<2 + in[1]>>2;
printf("%u\n",in[0]<<2 ); // outputs 48 --- correct
printf("%u\n",in[1]>>2 ); // output 1 --- correct
printf("%u\n",out[0] ); // output 768 --- wrong, I expected 49
}
int main(int argc, char const *argv[])
{
uint8_t in[3] = {12,6,9};
uint16_t out[2];
change(in,out);
return 0;
}
out[0] = (in[0]<<2) + (in[1]>>2);
进行编程。 - Vaibhavputs("hello, operator precedence");
- Lundin