gpt4 book ai didi

c - C 中值的范围

转载 作者:行者123 更新时间:2023-12-01 15:28:10 25 4
gpt4 key购买 nike

我从来没有在 python 中遇到过这样的变量类型(尽管我仍然是 python 的初学者并且刚刚开始使用 C)。

我在 C 语言中遇到过变量类型,并且对给出值范围的点感到困惑,例如 this.我做了以下推论:

  • 存储大小是特定类型变量可以容纳的空间量。但是关于取值范围我有很多疑惑:

  • 我认为取值范围是我们可以输入特定变量的整数:

示例:

我认为对于 signed char,存储大小是 1 个字节,我们不能输入 variable1 = 128,但是我在编译简单程序时错了;

#include <stdio.h>
int main(void)
{
signed char variable1;
variable1 = 128;
printf("the value is: %d", variable1);
return 0;
}
The output of the compiler(using dev C++) was :
-127

所以我认为它会从最小值开始,一旦它超过它的范围并在 255 之后产生错误,我是对的。从类型 -32,768 到 32,767 的 short int 类型也是如此。但是,对于类型 int -2,147,483,648 到 2,147,483,647,这失败了。它继续强调。

因此,我对值(value)范围的整个看法都落空了。这可能比我想象的要复杂。那么变量的取值范围是多少,我们如何解释所有这些奇怪的结果呢?

EDIT1:我编辑上传我的实验:

experiments

最佳答案

“C 中值的范围”是一个广泛的话题。就整数范围而言,1 位整数字段可能具有 0 到 1 或(-1 到 0)的窄范围。 intmax_t/uintmax_t 处理 64 位或更多位范围内的数字。 C 中许多整数类型之间的范围限制和转换是棘手的一点。


关注OP的例子:
在下面,128 是一个整数常量,值为 128,类型为 int

signed char variable1;
variable1 = 128;

signed char 的范围是 SCHAR_MINSCHAR_MAX。这通常是 -128 到 127,也可能小到 -127 到 127。(参见 C11 §5.2.4.2.1 1)

赋值需要将 int 转换为 signed char 并且以下适用于假定的 signed char 范围:(我的重点)

When a value with integer type is converted to another integer type other than _Bool, if the value can be represented by the new type, it is unchanged. C11dr §6.3.1.3 1

Otherwise, the new type is signed and the value cannot be represented in it; either the result is implementation-defined or an implementation-defined signal is raised. C11dr §6.3.1.3 3

典型的实现定义结果是 2 的补码环绕,因此 -128 的值很常见。 OP 的平台做了一些不同的事情,并赋予它 -127 的值(value)。它是实现定义的行为。 @2501


不确定“编译器的输出(使用 dev C++)是:-127”暗示 OP 正确使用了 C 编译器。 OP 应该确保这一点。

关于c - C 中值的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com