在进行位操作的时候,一定要注意有符号和无符号数之间的转换。

比如unsigned long long a = 0;

char b = 0x80;

a = (unsigned long long)b;

这样a的值是一个很大的数,除非你这样做,

a = (unsigned long long)(b & 0xff);

原因是当b与0xff做与运算时,系统会分配一个int类型的临时变量存储结果,这样把int再转换为unsigned long long时就没有问题了,因为最高位不再是1。

猜你喜欢

转载自blog.csdn.net/yuhengyue/article/details/78964530