我试图移动值为1111的变量'a'并将其移到左边,这样我就可以得到1110意味着它应该打印数字14.然而,它是打印30.我想是因为它是移位,但它没有最左边的位(11110),但它应该是1110.这是我的代码.谢谢.
int main(int argc, char *argv[]) {
unsigned a;
a=0xF;
a=a<<1;
printf(": %u\n",a);
Run Code Online (Sandbox Code Playgroud)
您的a变量被声明为unsigned- 这意味着它是一个unsigned int,通常有32位.所以当你0xF加入它时,它确实包含0x0000000F,或者
00000000000000000000000000001111
Run Code Online (Sandbox Code Playgroud)
在二进制.
当您将该位置向左移动时,它包含
00000000000000000000000000011110
Run Code Online (Sandbox Code Playgroud)
或十进制30.(0x1e十六进制)
如果你想将它限制在4位,你需要AND在每次移位操作后得到0xF的结果,比如
a = a << 1;
a = a & 0xF;
Run Code Online (Sandbox Code Playgroud)
这将导致a仅包含1110(但实际上包含00000000000000000000000000001110)