同一行内使用>> & +,导致运算为错误结果;
描述
为使一个int的每个字节相加得到sum值,例 int a = 0x01020304; 则sum = 01+02+03+04 = 10;
代码
int main()
{
// int num = 16909060;
int num = 0x01020304;
printf("num :%d \n", num);
int sum = 0;
int tmp;
void *p = (void *)#
tmp = *(unsigned char *)p + *(unsigned char *)(p + 1) + *(unsigned char *)(p + 2) + *(unsigned char *)(p + 3);
printf("tmp :%d \n", tmp);
sum = ((num >> 24)&0xff + (num >> 16)&0xff + (num >> 8)&0xff + num&0xff);
printf("sum0 :%d \n", sum);
sum = (num&0xff) + ((num >> 8)&0xff) + ((num >> 16)&0xff) + ((num >> 24)&0xff);
printf("sum1 :%d \n", sum);
printf("num :%d \n", num);
return 0;
结果
结论
第二种实现得到错误结果为0,后来发现这是隐藏的算术优先级问题,优先级 ‘+’ 大于 ‘>>’ 大于 ‘&’ ,在+之外加括号修改为第三种完成修改;