c - 在 C 中使用类型#define 值进行除法

标签 c header-files

<分区>

Possible Duplicate:
Why does this integer division yield 0?

我有一个 C 头文件,其中包含我的项目中使用的各种常量值。这些值是使用#define 定义的(例如#define MAX_DATA_VAL 5)。

当我在另一个文件中使用这个值进行除法时,我得到了错误的答案。

//- In file MyParameters.h
#define MAX_DATA_VAL  5
#define MIN_DATA_VAL -5



// - In file MyFunctions.c

#include "MyParameters.h"

void Function()
{
   float temp = 0;

   temp = 2/MAX_DATA_VAL;  // Wrong Output
}

temp 的值保持为 0(在调试时检查)。但是如果我这样做了:

temp     = 0;
float a  = MAX_DATA_VAL;

temp = 2/MAX_DATA_VAL;  // Correct Output

我得到了正确的答案!!...任何人都可以解释一下发生了什么...

提前致谢:)

最佳答案

MAX_DATA_VAL 被视为整数,因此您的除法是进行整数除法(向下舍入到最接近的整数)。为确保它知道它是一个 float ,请执行以下操作:

#define MAX_DATA_VAL 5.0f

关于c - 在 C 中使用类型#define 值进行除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199054/

相关文章:

c++ - 如何找出命名空间是如何被污染的?

c - 获取c中预处理器时间的定义值

c - 为什么在将整数除法存储在浮点变量中后,我在 C 中得到错误的结果?

c++ - 什么时候在一个文件中多次包含相同的 header 有用?

c - 如果有的话,隐式函数声明在 c/c++ 中的作用是什么?

c - 将静态函数分离到 C 中的另一个(头文件?)文件中

c - 为什么我需要标题?

c++ - 为什么skb_transport_header计算不正确?

c++ - 如何使用 OpenLDAP API 选择 LDAP 客户端绑定(bind)到哪个地址?

c - 如何释放指向数组的指针?