| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2203 人关注过本帖
标题:数据类型的极值对运算的影响
只看楼主 加入收藏
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
结帖率:94.74%
收藏
已结贴  问题点数:100 回复次数:18 
数据类型的极值对运算的影响
     大家先看看这两个小程序,一个类型为 int ,而一个类型为 unsigned ,是进行求余和除运算. unsigned 型的可以 oj,而 int 型的为 wr ,请大家帮我解释一下是为什么呢?最好从底层讲解,谢谢大家哦.

code 1:

程序代码:
#include<stdio.h>
#include<stdlib.h>
int NumConvert(int m, int k)
{
    char *s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int a[100];
    int i;
    unsigned n;

    if(!m)
    {
        putchar('0');
        return 0;
    }
    if(m<0)
    {
        putchar('-');
        n*=-1;
    }
    n=abs(m);
    for(i=0;n;)
    {
        a[i++]=n%k;
        n/=k;
    }
    while(!a[--i])
        ;
    for(;i>=0;--i)
    {
        printf("%c",s[a[i]]);
    }

    return 0;
}


code 2:

程序代码:
#include<stdio.h>
#include<stdlib.h>
int NumConvert(int m, int k)
{
    char *s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int a[100];
    int i;
    int n;

    if(!m)
    {
        putchar('0');
        return 0;
    }
    if(m<0)
    {
        putchar('-');
        n*=-1;
    }
    n=abs(m);
    for(i=0;n;)
    {
        a[i++]=n%k;
        n/=k;
    }
    while(!a[--i])
        ;
    for(;i>=0;--i)
    {
        printf("%c",s[a[i]]);
    }

    return 0;
}
搜索更多相关主题的帖子: 运算 数据 类型 极值 
2010-01-23 18:27
nbaqqqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:202
专家分:137
注 册:2009-11-6
收藏
得分:0 
100分啊 看着馋啊 但吃不到啊 连主函数都没见     #include<stdlib.h>这种声明也没见过               n=abs(m);是什么啊   调用函数么 函数体呢      唉 C内容根本就没学完 老师就结课了
2010-01-23 18:55
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
程序看懂·了不明白为什么···?
     
n*=-1;
    }
    n=abs(m);
    for(i=0;n;)
    {
        a[i++]=n%k;
        n/=k;
这些语句用到了n
还有一个疑问无符号整型不是应该用unsigned int 表示?
unsigned·能表示·?
还是说浮点型?
2010-01-23 19:30
mey
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:137
专家分:134
注 册:2009-11-19
收藏
得分:0 
看不明白
2010-01-23 19:51
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:30 
#include <stdio.h>
#include   <limits.h>

main()
{
    int i   =    INT_MAX;
    int k =  INT_MIN;
    unsigned n = INT_MAX;

   printf("UINT_MAX = %u  INT_MAX = %d  INT_MIN = %d\n",UINT_MAX,INT_MAX,INT_MIN);

   printf("1.   n = %u  i = %d   k= %d \n",n,i);

   n=abs(k);
   printf("2. n=abs(k)  n = %u \n",n);

   i=abs(k);
   printf("3. i=abs(k)  i = %d \n",i);
   getchar();

}

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2010-01-23 20:00
xinjinlong
Rank: 3Rank: 3
来 自:河南南阳
等 级:论坛游侠
帖 子:61
专家分:117
注 册:2010-1-19
收藏
得分:0 
程序就是把一个数转化成任意进制(<=36),就是这个功能,不明白这句话是什么意思:unsigned 型的可以 oj,而 int 型的为 wr
2010-01-23 21:06
xiaotutu6000
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:85
专家分:137
注 册:2009-10-30
收藏
得分:0 
数据溢出

VC下两个类型的大小都为4个字节,也就是32位,也就是可以储存32个0和1

Turbo.c下面为2个字节,16位,可以储存16个0和1

当你家房子住满了人,在住人的时候也就进不去了,就会丢失~!

多去网上搜搜~!有答案的
2010-01-23 22:13
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:0 
看看有符号数和无符号数的2进制表示法

without further ado, let’s get started
2010-01-23 23:46
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 8楼 iFreeBSD
    呵,对不起,是我的表述不太详细.其实这是一个 OJ 上的题目.题目中的条件是  n  的取值范围为 int 型.而当我把数据设为 int 时,就会 wr .

    我想,不应该是题目出的有错误吧?应该是极值在输入输出时可以,但进行运算可能就会出现错误.是这样吗?谢谢.
2010-01-24 01:36
zhddragon
Rank: 5Rank: 5
等 级:职业侠客
帖 子:208
专家分:346
注 册:2009-5-14
收藏
得分:0 
应该是所用的编译程序所实现的abs()函数出现bug,很可能它使用的原型是int abs( int ) 而int型的取值是非对称的,有一个负值(最小的负值)在同样长度的数据类型中无法表示。例如对于有符号数(假设为16位)最小的数的表示为0x8000,对他取补后依然为0x8000,如果使用上面那个abs的原型,使用int去获得这个返回值,那么这个值在运输时依然会被解释为负值,abs函数在这时候会失效。可使用同类型的无符号型或更长的数据类型去获得这个数,然后在进行运算。

身体是玩命的本钱
2010-01-24 01:47
快速回复:数据类型的极值对运算的影响
数据加载中...
 
   



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

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