考虑:
#include <stdio.h>
#define macro(a) a=a<<4;
main()
{
int a = 0x59;
printf("%x", a);
printf("\n");
macro(a)
printf("%x", a);
}
对于上面的代码,我得到以下输出:
59
590
为什么我的左移操作没有得到下面的输出?
59
90
最佳答案
左移不会而不是截断数字以适合原始数字的长度。要获取90
,请使用:
(a<<4) & 0xff
0x59
是int
,可能在您的平台上它具有sizeof(int)==4
。然后是0x00000059
。向左移动4可以得到0x00000590
。另外,养成使用按位运算符时使用
unsigned int
类型的好习惯,除非您知道自己在做什么。他们在右移等情况下有不同的行为。关于c - C中的左移运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15242788/