处理C语言移位量过大
假设定义一个int类型的变量,int类型在当今32.64位系统中占有4个字节,4byte=32bit,当移位的位数超过数据类型位数时候编译器该怎么处理呢?
答案:
是将【移位量】mod【数据类型位数】
int a = 0xfedcba98;
int val1 = a << 32;
int val2 = a >> 36;
unsigned int val3 = (unsigned int)a >> 40;
printf("%x,%x,%x", val1, val2, val3);
这一段数据是否和我们理想中的值相似呢?
实际答案和我们理想答案中的0有出入,所以在进行移位时候尽量不超过数据类型位数,保证了编程可读性,避免过于复杂难以理解。
总结:在编程时候保持移位量小于移位值的位数