C ++中的整数可以是NaN吗?

Posted

技术标签:

【中文标题】C ++中的整数可以是NaN吗?【英文标题】:Can an integer be NaN in C++? 【发布时间】:2011-04-26 08:30:39 【问题描述】:

我可以将int 设置为NaN 吗?如果是,那么如何检查int 是否为NaN

【问题讨论】:

【参考方案1】:

我认为处理故障最合适的 API 是在您的 api 中返回第二个整数错误代码,例如:

int myfunc(args, int* realReturn);

返回的 int 是错误代码。

前面的输出在调用代码中作为指针传递:

int myInt;
if (myFunc(args, &myInt) != 0) 
//handle error

【讨论】:

【参考方案2】:

Nan 没有任何特定的 int 值。人们通常做的是使用一些大整数来表示这个值。如果它是无符号整数,那么它通常使用-1。

【讨论】:

【参考方案3】:

不,NaN 是浮点值。

int 的每个可能值都是一个数字。

编辑

标准说:

6.2.6.2 40) 一些填充位组合可能会产生陷阱 表示,例如,如果一个 填充位是奇偶校验位。 无论如何,没有算术运算 有效值可以生成陷阱 代表 不是作为的一部分 特殊情况,例如 溢出,这不会发生 无符号类型。

因此可能存在一些特定于实现的无效整数值,但没有定义生成它们的方法。

【讨论】:

"int 的每个可能值都是一个数字。"那是标准的一部分,还是只是在实践中总是正确的东西?例如,在 C99 标准中,整数类型可以有陷阱表示。只有unsigned char 保证没有。 @Pascal 陷阱表示不被视为值。 “某些对象表示不需要表示对象类型的值。[...] 这种表示称为陷阱表示。” @Johannes:我确信 DerKuchen 指的是位模式,而不是对象类型的值。 numeric_limits<int>::quiet_NaN(),当然 ;v) 。 — 严肃地说,NaN 不是浮点值,它没有任何值,FP 或其他值。恰好添加到 FP 格式比添加到定点格式更便宜。 @Potatoswatter 根据link quiet_NaN() 将返回0 for int【参考方案4】:

Generally (and specifically in the case of C++, to the best of my knowledge): no.

整数 NaN

大多数固定大小的整数格式没有任何方式明确指示无效数据。

【讨论】:

嗯,有时它实际上必须。例如,ISO C 的ilogb 使用FP_ILOGB0INT_MAXFP_ILOGBNAN 对来自数学上无效输入的无效结果(int 类型)进行编码。这些是无效的,因为该函数也可能在相同条件下引发FE_INVALID 浮点异常。【参考方案5】:

不,您不能将 int 设置为 NaN。

【讨论】:

以上是关于C ++中的整数可以是NaN吗?的主要内容,如果未能解决你的问题,请参考以下文章

C语言,哪位好心的大哥,姐姐:能告述我位运算吗?我看不懂啊!

c语言float可以输入指数吗

C语言中的整形变量是啥?

C语言中啥是一个8位的整数

判断任意一个整数是3又是5的倍数 c语言

C语言中float型数据怎么 取整数部分算法 或取小数部分