c - 除法和类次的区别

标签 c floating-point division bit-shift

我正在阅读 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,而不是 floatdouble。但是,您的格式说明符是 %f,因此您的 int解释float,这是没有意义的,因此不稳定的值(value)。您正在做的事情称为未定义行为:任何事情都可能发生。

关于c - 除法和类次的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14302573/

相关文章:

c++ - 在一个循环中证明内存访问

c - IEEE754中是否有关于加法的中性元素

algorithm - 数字递归平方根

java - 二维数组(乘法/除法)

c++ - 为处理器执行除法和取模的最佳方法是什么?

使用带有 waitpid pselect fork sigaction 的处理程序清理子进程

c - 多进程读/写fifo

c - 如何使用fork()创建这个进程树?

c - 我用 pow(10,2) 和 pow(10,j), j=2; 得到了不同的结果;

c - 判断一个数是否是整数?