迷茫小谎言 2021-12-04 14:56 采纳率: 0%
浏览 4
已结题

C语言提问:为什么下面这串代码输入一个正奇数不是一个死循环?


# include <stdio.h>

int main(void)
{
    int n, t=-1, s=0;
    
    scanf("%d", &n);   //输入3 
    do
    {
        s += t;
        t -= 2;
    }while(t != n);
    printf("%d %d", s, t);  //输出-4, 3
    
    return 0;
}

从代码上看,t的初始值是负数,后面t也是一直-1,那么t理论上应该一直是负数,也是t不应该会和一个正数n相等,那么循环就不会停止,但是这里为什么输入的n为一个正奇数的时候循环仍会停止、且输出结果显示循环后t==n了,这是为什么?
经过测试,循环次数非常大,也就是循环了超级多次才停止的,这是否与负数补码有关?不明白、求指点!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月12日
    • 创建了问题 12月4日

    悬赏问题

    • ¥20 wordpress如何限制ip访问频率
    • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据
    • ¥15 请求解答odoo17外发加工某工序的实操方法
    • ¥20 IDEA ssm项目 跳转页面报错500
    • ¥20 系统直接进入应急模式了,请教一下,人要裂开了
    • ¥15 页面初次加载时,JS调用对象可以调用成功,但是一旦跳转到另一个页面,再跳转回来后这个对象就显示undefind了,调用也调用不了了,什么原因?
    • ¥15 来个厉害的程序开发的,安排点活给你做
    • ¥15 rexroth indramotion MTX micro系统轴耦合编程
    • ¥100 springboot2.7.x 整合 sharding 的问题
    • ¥15 如何通过命令行操作统信360安全浏览器?