考虑:

#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
0x59int,可能在您的平台上它具有sizeof(int)==4。然后是0x00000059。向左移动4可以得到0x00000590

另外,养成使用按位运算符时使用unsigned int类型的好习惯,除非您知道自己在做什么。他们在右移等情况下有不同的行为。

关于c - C中的左移运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15242788/

10-11 21:04