【问题标题】:Maximum values for Variables in C vs JavaC 与 Java 中变量的最大值
【发布时间】:2019-01-17 02:53:26
【问题描述】:

我在这里遇到一个问题,要求我显示一个变量可以存储的最小值和最大值,包括:Short、Integer、Long 和 Float。我应该用比正确答案少一的方式初始化它,然后给它加 1 以证明变量没有出错。 示例。

short srtMaximum = 32766;
srtMaximum += 1;
System.out.print(”Max value for short is “ + srtMaximum);

我应该为 C 和 Java 做这个。 Java我没问题。 短是-32768, 32767 整数为 -2,147,483,648、2,147,483,647 长 -9quintillionL, 9 quintillionL 浮动是我不记得的东西

但是我对 C 感到困惑。
短似乎是一样的。 但是 Long 只能保持与 Int 相同的值吗? 文档说 int 有时只能是 -32768 - 32767?

我不知道如何用花车来做这个项目。无论我为浮点数分配什么值来测试它,它都会在 printf 中打印出不同的东西

【问题讨论】:

  • 也许您正在寻找clong long
  • (java)Integer.MAX_VALUE...怎么样?
  • 在 Java 中,数字类型在任何地方都是固定大小的。因此存在诸如Integer.MAX_VALUEInteger.MIN_VALUE 之类的常量。如果内存服务,在 C 中,每种类型的最小大小为 specified,因此没有直接比较。
  • 一般在 C 中,sizeof(char) <= sizeof(short)sizeof(short) <= sizeof(int)sizeof(int) <= sizeof(long)sizeof(long) <= sizeof(long long)。 C 规范说sizeof(char)总是 等于1, and that long long` 至少是 64 位类型。您可以使用<stdint.h><limits.h> 找到当前实现/目标的the limits
  • C 中的限制取决于平台。 Java 中的限制是由语言而不是平台指定的。

标签: java c


【解决方案1】:

您可以使用limits.h 找出系统上的最大整数值。您可以使用float.h 找出最大的浮点值是多少。

这是limits.h的一个例子:

#include <limits.h>
#include <stdio.h>

int main() {
    printf("INT_MAX: %d\n", INT_MAX);
    printf("UINT_MAX: %u\n", UINT_MAX);
    printf("LONG_MAX: %ld\n", LONG_MAX);
    printf("ULONG_MAX: %lu\n", ULONG_MAX);
}

我不确定您的讲师所说的“比最大浮动小一”是什么意思。小于最大浮点数的 1 不可表示。

无论我为浮点数分配什么值来测试它,它都会在 printf 中打印出不同的东西

浮点数不能精确地表示所有数字。以下是如何判断您是否可以准确地表示它:

  1. 将其转换为分数
  2. 减少分数
  3. 检查分母是否为 2 的幂。

示例:0.1 可以精确表示吗?

  1. 首先,将其转换为分数:1/10
  2. 接下来,减少:1/10
  3. 10 不是 2 的幂。因此,0.1 无法精确表示。

【讨论】:

  • one less than the maximum float. Java 有一个Math.ulp() 方法,用于确定给定浮点值的最小可用更改。也许有一个具有类似 C 功能的库?
  • 使用 GMP:GNU 多精度算术库。将在 C 语言中为您提供非常高的精度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2011-09-15
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多