使用溢出和循环在 C 中查找最大值

NoCodeNoBlunder

任务是通过循环找到最大的 int 值。我在 C 和 Java 中几乎有完全相同的代码。在 Java 中它工作正常,但在 CI 中得到最小值,我想知道为什么。

C

#include <stdio.h>
int main() {
    int i = 0;
    for (; i+1 > 0; i++) { }
    printf("%d", i);
    return 0;
}

爪哇

public class Java {
    public static void main(String[] args) {
        int i = 0;
        for (; i+1 > 0; i++) { }
        System.out.println(i);
    }
}
安德烈亚斯文策尔

您的代码似乎错误地假设在 C 中, an保证在overflowint上包装为负数这个假设是错误的。这样的有符号整数溢出将在 C 中调用未定义的行为,因此如果让这种情况发生,则不能依赖任何特定的行为。

为了找到 的最大可表示值,您可以使用在中定义int的宏常量INT_MAXlimits.h

但是请注意,只有有符号整数溢出才会调用 C 中的未定义行为。与此相反,当使用无符号数字时,它们保证以明确定义的方式包装。因此,您可以unsigned int使用您的方法找到最大的可表示对象。

此外,一些编译器有一个设置会导致有符号整数溢出的行为变得明确(假设您的硬件支持它并使用二进制补码来表示有符号数,这可能就是这种情况)。在 gcc 和 clang 中,您可以使用-fwrapv编译器命令行选项来实现这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用递归 C++ 查找向量中的最大值

使用C中的函数查找数组中的最大值和最小值

使用c#在excel中查找每个月的最小值和最大值

C ++如何在n个元素的一维数组中查找最小值和最大值?

在C prgram中查找一系列数字的最大值和最小值(我的代码错误)

在C ++中递归查找向量中的最大值

在.json中查找最大值和最小值

从C中的for循环中找到最大值和最小值

在使用for循环的数组中查找最大值和最小值?

如何使用循环从文件中查找最大值和最小值

在Python中循环查找每个命运的最大值

在 for 循环 Python 中查找前 10 个最大值

使用递归查找数组中的最大值

如何使用awk在列中查找最大值

使用递归查找数组中的最大值

使用函数从文件中查找最大值

使用递归查找数组中的最大值相对

使用C中的指针的数组的最大值和最小值

如何使用C++中的指针获取最小值和最大值

C#使用linq查找字符串的最大值

浮点比较C ++-查找最大值

查找元组元素的最大值c ++

通过for循环查找数组中的最大值和最小值

Python在dataframe列中查找最大值以循环查找所有值

从 for 循环中查找最大值

c函数查找传入的n个数的平均值,和,最小值和最大值

查找巨大的ascii文件中包含的最大值和一组最大值(以科学计数法表示)

在C ++中定义变量的最大值和最小值

Python中C类型整数的最大值和最小值