c语言里移位操作新的理解

问题概述:crc-8计算crc时,异或运算计算结果异常 解决方案:在移位操作时,待移位数需要与目标移位数的字节数相同。 比如: char a = 8; a <<= 8; 运算结果任然是1个字节 这时如果和一个16字节数字进行异或运算: int b = 12; int c = b^a; 运行结果:c=

问题概述:crc-8计算crc时,异或运算计算结果异常

解决方案:在移位操作时,待移位数需要与目标移位数的字节数相同。

比如:

char a = 8;

a <<= 8;

运算结果任然是1个字节

这时如果和一个16字节数字进行异或运算:

int b = 12;

int c = b^a;

运行结果:c=12

由此,得出:在运行移位操作时,如果期望移位后字节数大于原始声明字节时,编译器不会自动扩充,需要在声明时主动声明符合移位后最大字节的数据类型。

其它知识点:

1ull 此时1移位时可以最大字节数为unsigned long long 。

1ul 对应unsigned long

其它依次类推

crc计算时可以8位8位的进行运算:

通过每次提取出数据的前八位来与多项式进行异或运算,结果再向后取到8位,重复运算,直到达到最后。

LICENSED UNDER CC BY-NC-SA 4.0
Comment