幕布斯7119047
左移时,算术和逻辑移位没有区别。右移时,移位的类型取决于所移动的值的类型。(对于那些不熟悉这种差异的读者来说,“逻辑”右移1位会将所有位移到右边,并用0填充最左边的位。“算术”移位将原始值保留在最左边的位上。在处理负数时,差异变得很重要。)当移动一个无符号值时,C中的>操作符是一个逻辑移位。当移动有符号值时,>操作符是算术移位.例如,假设32位机器:signed int x1 = 5;assert((x1 >> 1) == 2);signed int x2 = -5;assert((x2 >> 1) == -3);
unsigned int x3 = (unsigned int)-5;assert((x3 >> 1) == 0x7FFFFFFD);