我试图更好地理解bishift操作,所以我写了一个小程序.
unsigned char a = 240;
a= (a << 3) >> 7;
printf("a: %u\n",a);
Run Code Online (Sandbox Code Playgroud)
现在我想象结果将是这样的:
11110000 // 240
10000000 // << 3
00000001 // >> 7
Run Code Online (Sandbox Code Playgroud)
所以1,但我得到15.我很困惑...任何帮助表示赞赏!
你的问题是这句话:(a << 3)将输入转换为int.所以在这一点上你有240 * 2 ^ 3 = 1920
00000000000000000000011110000000
Run Code Online (Sandbox Code Playgroud)
然后你将之前的结果除以2 ^ 7 = 128你有:15
00000000000000000000000000001111
Run Code Online (Sandbox Code Playgroud)
这正是你得到的结果.
如果你想截断你可以使用的位:
printf("a: %u\n",a & 1); //get only last bit so you would have 1 as a result!
printf("a: %u\n",a & 255); //get all 8 bits
Run Code Online (Sandbox Code Playgroud)
希望这有帮助!