我认为移位运算符会移动整数的内存或者它所应用的字符的内存,但以下代码的输出对我来说是一个惊喜。C中的移位运算符的确切用法是什么?
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(void) {
uint64_t number = 33550336;
unsigned char *p = (unsigned char *)&number;
size_t i;
for (i=0; i < sizeof number; ++i)
printf("%02x ", p[i]);
printf("\n");
//shift operation
number = number<<4;
p = (unsigned char *)&number;
for (i=0; i < sizeof number; ++i)
printf("%02x ", p[i]);
printf("\n");
return 0;
}
的系统在其上它跑是小端和产生以下输出:
00 f0 ff 01 00 00 00 00
00 00 ff 1f 00 00 00 00
有人可以提供一些参考移位运算符的具体工作?
http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts – etuardu
左移我认为你是显示你的字节顺序错误。如果字节的顺序颠倒过来,那么它看起来是有道理的。您的代码是针对32位还是64位系统? – user957902
@ user957902就像他说的那样,它在一个小端机上很有意义。 –