分裂和转移之间的差异

Abh*_*pta 1 c floating-point bit-shift division

我正在读这个问题.看完第一个答案后,我无法理解原因-5 >> 1 = -3.我还对它进行了一些调整.

您还可以在此处查看代码和输出.这是我做的:

#include<stdio.h>

int main(){

printf("5/2 = %d\n",5/2);
printf("5 >> 1 = %d\n",5 >> 1);
printf("5/2 = %lf\n",5/2);
printf("5 >> 1 = %f\n",5 >> 1);
printf("-5/2 = %d\n",-5/2);
printf("-5 >> 1 = %d\n",-5 >> 1);
printf("-5/2 = %f\n",-5/2);
printf("-5 >> 1 = %f\n",-5 >> 1);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

5/2 = 2
5 >> 1 = 2
5/2 = 2.168831
5 >> 1 = 2.168831
-5/2 = -2
-5 >> 1 = -3
-5/2 = 2.168833
-5 >> 1 = 2.168833
Run Code Online (Sandbox Code Playgroud)

我无法理解5/2 == 2.168831, 5 >> 2 == 2.168831, 5 >> 1 == -3.

为什么会这样? (答案可能是非常基本的,我错过了一些基本的东西,所以请指导我).

use*_*016 9

结果-5 / 2是a int,而不是a float或a double.但是你的格式说明符是%f,所以你int解释为a float,这是没有意义的,因此不稳定的值.你在做什么被称为未定义的行为:任何事情都可能发生.

  • 它*发生*.这是未定义的行为:任何事情都可能发生.试图从结果中弄清楚是没有意义的.例如,在我的机器上,我得到`0`而不是`2.168831`. (2认同)