| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:不知道该怎么写标题
只看楼主 加入收藏
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
结帖率:86.67%
收藏
已结贴  问题点数:20 回复次数:6 
不知道该怎么写标题
程序代码:
#include<stdio.h>

int main(void)
{
    int s=1,i;

    for(i=1;i<=40;i++){
        s+=s;
        printf("%d\n",s);
    }
    return 0;
}

输出结果后面是
...
1073741824
-2147483648
0
后面就是都是0,为什么是-2147483648,-2147483648之后为什么一直是0?
搜索更多相关主题的帖子: 标题 int printf return 结果 
2019-02-28 21:21
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:0 
1073741824*2超过了int的范围,后面的计算是非正常的。

saber,别哭.
2019-02-28 21:29
pseudo
Rank: 2
等 级:论坛游民
威 望:5
帖 子:70
专家分:85
注 册:2019-2-21
收藏
得分:2 
一般int型数据被赋予两个字节即16位,范围为-2的16次-1到2的16次-1。你的那个超了范围。

就算没有六便士,也要追求我的月亮。
2019-02-28 22:45
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
数据太大,溢出了

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2019-03-01 10:07
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 2楼 幻紫灵心 3楼 pseudo 4楼 waterstar
额,我知道溢出,但我想知道为什么溢出后第一个会出现那个负数,然后一直0循环,当溢出后是怎么执行得到这些结果的,谢谢

[此贴子已经被作者于2019-3-1 18:07编辑过]

2019-03-01 18:05
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
收藏
得分:16 
回复 5楼 古123
int是有符号的,占两个字节16位,下面以一个8位的二进制数来说(最高位为符号位)
正数:00000001 到 01111111
负数:00000000 到 11111111
-0:1000 0000;+0:0000 0000
C规定-0为-128,所以当最大的正数01111111溢出就会变成1000000也就是-128,这好比一个环,溢出时在环内循环
2019-03-01 20:20
古123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:219
专家分:1098
注 册:2017-2-5
收藏
得分:0 
回复 6楼 花脸
抱歉,之前没能及时回复你,谢谢。
2019-03-05 21:39
快速回复:不知道该怎么写标题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019320 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved