我正在阅读 this关于SO的问题。阅读第一个答案后,我无法理解 -5 >> 1 = -3
的原因。我还围绕它做了一些调整。
您还可以查看代码和输出 here . 这是我所做的:
#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;
}
输出:
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
我无法理解 5/2 == 2.168831, 5 >> 2 == 2.168831, 5 >> 1 == -3
。
为什么会这样? (答案可能非常基础,我遗漏了一些基本的东西,所以请指导我)。
最佳答案
-5/2
的结果是 int
,而不是 float
或 double
。但是,您的格式说明符是 %f
,因此您的 int
被解释为 float
,这是没有意义的,因此不稳定的值(value)。您正在做的事情称为未定义行为:任何事情都可能发生。
关于c - 除法和类次的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302573/