C 为什么 3 除以 2 在一个 int 中等于 0,而在另一个 int 中等于 1?

标签 c int division

在 C 语言中,我编写了一个程序,使用二分搜索在有序数组中搜索数字。我在程序的一部分中有以下代码,用于定义两个变量:middle 和 check。

(n是数组的大小)

int middle = 0;
int check = 0; //Checks if array holds an odd or even amount of numbers
check = n/2;
printf("check = %d\n", check);

由于某种原因,检查显示为 0,而不是 1。然而,更让我困惑的是,在我给它分配了 n/2 后,中间的值也等于 1。

    //Is there an even amount of numbers?
    printf("n = %d\n', n);
    printf("Checking if array is even or odd.\n');
    printf('Check starts out equaling %d after being divided\n", check);
    while (check > 1)
    {
        check = check/2;
        printf("Check equals %d\n", check);
    }
    if (check == 0)
    {
        //Number is even
        middle = n/2;
        printf("Even amount, middle = %d\n", middle);
    }
    else
    {
        //Number is odd
        middle = (n - 1)/2;
        printf("Odd amount, middle = %d\n", middle);
    }

当我使用由数字 2、3 和 4 组成的数组运行代码时,我得到以下结果。

check = 0
Even amount, middle equals 1

当两者都是整数并且等于同一个公式时,为什么检查等于 0 和中间等于 1?我希望两者都等于 1,但无法理解为什么 check 等于 0。

最佳答案

在我看来,执行代码的顺序可能是这里的一个因素。我的猜测是,当您的第一个代码块运行时,n = 0,而 n 实际上等于您在第二个代码块运行时期望的值。如果不查看您发布的两个 block 之间的代码,很难判断,但请检查整个代码中 n 的值,看看情况是否如此。

P.S.:您可能想在“Even amount”printf 的末尾添加一个换行符。

关于C 为什么 3 除以 2 在一个 int 中等于 0,而在另一个 int 中等于 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24842646/

相关文章:

c# - 我收到 System.NullReferenceException : Object reference not set to an instance of an object when trying to add a value to an array at runtime

c++ - 即使 int 被 10^9+7 模数也会溢出

sql - 在 SQL 中计算百分比

javascript - 如何让 Javascript 中的除法运算符起作用?它认为这是一个正则表达式

java - 使用递归的整数除法——以及其他一些有趣的限制

c - 在C中将字符串转换为整数的递归函数

C 字符串声明

c - Short 到 Int 类型转换不起作用,为什么?

C: 如果没有单独的功能,代码将无法工作。为什么?

c - 可以使用 execvp 和 fork 退出和更改目录的简单 Shell