今天碰到了负数除法与右移的替代问题,借机研究一下C语言中负数除法的问题。此处只讨论整数除2的幂次方的情况,并取-7~-5除以4为例,不讨论一般除法的移位优化。
1. 负数右移
对于有符号整数,右移时按高位补符号位的原则,则结果会向小于它的整数取整。如
-5 >> 2 = -2;
-6 >> 2 = -2;
-7 >> 2 = -2;
2. 负数除法(截断)
博文《议“右移一位 等同于 除以二”》http://blog.chinaunix.net/uid-406135-id-3421605.html中有这样一段描述:“C99和C++0x规定,商向零靠近取整,在 C99 和 C++0x 之前,只保证商