C语言中整数除以2和右移一位的问题

来源:百度知道 编辑:UC知道 时间:2024/05/13 04:50:12
对于一个整数(int A),除以2(A/=2)和右移一位(A>>=1)有什么区别?采用什么方法能让他们的计算结果一致
但是说要用什么方法能让计算结果一致,那应该是有不一致的结果的啊,而且也没说出有什么区别啊

左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。

给你举个例子吧

比如说,A=7;
把A化成二进制的就是111;
A/2是十进制的运算,也就是7/2 = 3;
A>>=1是将A的二进制位向右移一位,也就得到011,结果也是3;

一般情况下这两种运算结果都会相同的,
如7 = 1*2^2+1*2^1+1*2^0;
除以2以后 1*2^1+1*2+1*2^-1;
结果也就差在最后的那个0.5上,但是,/是整出,最后的0.5会舍去,所以结果应该会相同;