输入短整型数,比较对应的无符号数的大小,输出最大值最小值

从键盘上输入三个短整型数,分别存放到a、b、c中,求这三个数中最大的无符号数和最小无符号数及其对应的输入值。

#include<stdio.h>


void main()

{

    short int a,b,c;

    unsigned int max,min;

    scanf("%d %d %d",&a,&b,&c);

    a=(unsigned int)a;

    b=(unsigned int)b;

    c=(unsigned int)c;

    if(a>b){

        max=a;

        min=b;

    }

    else{

        max=b;

        min=a;

    }

    if(c>max){

        max=c;

    }

    else if(c<min){

        min=c;

    }

    printf("%u unsigned max:%u   unsigned min: %u\n",a,max,min);

    printf("max(input):%d     min(input):%d\n",max,min);


}

输入-1 -2 5

输出

unsigned max:5   unsigned min: 4294967295

max(input):5     min(input):-1

我觉得很奇怪为什么实际上5对应的无符号数应该是最小的才对,-1才是最大的,输出出来为什么正好相反??

我觉得是不是跟我的变量定义有关?max=c,c为无符号数,max为有符号数,两者是怎么比较的啊??


qq_nanranlanW_0
浏览 2564回答 3
3回答

慕的地8582982

HFBQJQSLISCXDDTTDLGAUUBKHLLANVOCFGKXEEUHXSSQXDQHNPAQDJBPVIIINIPICAGZZGZWTCMMXPOLVMAFZKXOJYOLKKYHAREHKWMGTATDUICCOGQNYOBZNKQXNDUYRKVFVEJBRIPIBTDNTQGQQISSCZNXZQAUUILFCIERLKROPZTJWQYQJJROHOLWIPMGXOBEOIUNELOLVGMQQTPWGOEHCXOTMJTOVODEDOOVIVPENREHVSIVISPTHKXRLHNJOYYYUDVBJMGLCWTRKCPPSLXNXRILCIFZQEBNKKTAKGWSJGBUWJMTNTIBISSZCORSXOYYYXQTCSMUUUUVUEXZWCOWMOIOILFCPZTAKOAXUCSKFSGNHBRBJZAHCDHODQJDNANAFFNAXAAUCDZYMDTOILCKRCIZTGHQOEMNQGNAUEDNIREYOYTXDNKRBOYVJDNGZJAMIBYVMMPIRZFMWXLVIRUECVOVZXLPCFWQCNNNEKRLEBHKRSGXEXRNBOULFPELINWXABUXOEVLQJDKWPYIAHGTFCZKJNNEHEXMBHCIOUUEHUQLENHAXUGWJZWJFVXHIYVIFJCUAAGZQRYBYXBHNHAKSOBWTCJWWALICILPLEKOQJIIYCMNAXQNGGDAHQSLKKAEDDZJALETWQAKJQWDMSRVLVMZMSTMWSSSZNUAXBRDHHAMKDSPZZXPXKQANTTQFYBHSIVHEKGFQZZCPFVYRLRDKKENNUZXBZFSLZMWCYVFDFIWPAXQTGWCYBLONYIBLDKQEHPSYAJTQKWGJQTKJGEYSVROXEXNDVITDXNHXBUTRHVYBKHXRCEWGEBAENKAEDRKCFYOHXAJCZQJCEFYNUCUYVEOVVLZPQFJPMFOORRBKALM

八神花露水

谁跟你说-1转换为无符号整数是取它的补码的,2^32+(-1)才是转换后的结果。转换后又用short int接收这么大的值,肯定又转成负数了,之后你又以无符号整数形式 %u 打印负数,当然结果会变得很奇怪。不要给自己设坑,把里面的 short int 全部改为 int 结果应该就正常了。

雪颲

无符号是什么意思你没搞清楚
打开App,查看更多内容
随时随地看视频慕课网APP