| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 683 人关注过本帖
标题:为什么我这个算完之后最后一个是负数?
只看楼主 加入收藏
哀啼小新淫
Rank: 1
等 级:新手上路
帖 子:22
专家分:2
注 册:2013-1-12
结帖率:62.5%
收藏
已结贴  问题点数:20 回复次数:9 
为什么我这个算完之后最后一个是负数?
程序代码:
#include<stdio.h>
int main()
{
    _int64 m,n;
    m=1,n=1;
    while(m<=64)
    {
        printf("%I64d %I64d\n",m,n);
        n=n*2;
        m++;
    }
    return 0;
}
为什么我用%I64d输出最后一个结果是负数,而用%I64u输出最后一个结果就变成整数了。
2013-03-29 16:36
哀啼小新淫
Rank: 1
等 级:新手上路
帖 子:22
专家分:2
注 册:2013-1-12
收藏
得分:0 
发帖没发好,那是两个程序。
2013-03-29 16:37
哀啼小新淫
Rank: 1
等 级:新手上路
帖 子:22
专家分:2
注 册:2013-1-12
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
这个是%I64d输出的结果。
图片附件: 游客没有浏览图片的权限,请 登录注册
这个是%I64u的结果。
我进行的都是乘法运算为什么会出现符号?
2013-03-29 16:42
X1AO
Rank: 3Rank: 3
来 自:北京邮电大学
等 级:论坛游侠
威 望:1
帖 子:52
专家分:123
注 册:2013-3-6
收藏
得分:4 
溢出了。u的话是无符号数(usigned),他表示的范围比d要大一倍。

不要问我下课干什么,我陪瓜哥上厕所。
2013-03-29 17:08
shmilyflf
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:5
帖 子:356
专家分:1008
注 册:2012-12-9
收藏
得分:4 
蹭分……
2013-03-29 17:32
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:4 
一般出现这个问题,很可能都是变量类型问题所致,溢出

Maybe
2013-03-29 17:32
哀啼小新淫
Rank: 1
等 级:新手上路
帖 子:22
专家分:2
注 册:2013-1-12
收藏
得分:0 
这溢出的也太巧了,正好就差个负号。
2013-03-29 18:29
gikieng
Rank: 2
等 级:论坛游民
帖 子:19
专家分:14
注 册:2013-3-7
收藏
得分:4 
回复 7楼 哀啼小新淫
这有有什么巧不巧的,看看整形数据在计算机里储存的方式就知道了。

来的是新手,请多多包涵。。。
2013-03-29 19:24
gikieng
Rank: 2
等 级:论坛游民
帖 子:19
专家分:14
注 册:2013-3-7
收藏
得分:0 
回复 8楼 gikieng
你可以试这样
#include<stdio.h>
int main()
 {
     _int64 m,n;
     m=1,n=1;
     while(m<=64)
     {
         printf("%I64d %I64d\n",m,n);
         n=n*2;
         m++;
    printf("%I64d",n-1);
     return 0;
 }

来的是新手,请多多包涵。。。
2013-03-29 19:28
望角的期盼
Rank: 2
等 级:论坛游民
帖 子:16
专家分:13
注 册:2013-3-23
收藏
得分:4 
是啊,你的变量类型应该改一下,应为位数的不够,导致溢出,可以改成float型
2013-03-29 20:37
快速回复:为什么我这个算完之后最后一个是负数?
数据加载中...
 
   



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

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