qq_nanranlanW_0
2017-03-07 20:53:08
從鍵盤上輸入三個短整型數(shù),分別存放到a、b、c中,求這三個數(shù)中最大的無符號數(shù)和最小無符號數(shù)及其對應(yīng)的輸入值。#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: 4294967295max(input):5 ? ? min(input):-1我覺得很奇怪為什么實(shí)際上5對應(yīng)的無符號數(shù)應(yīng)該是最小的才對,-1才是最大的,輸出出來為什么正好相反??我覺得是不是跟我的變量定義有關(guān)?max=c,c為無符號數(shù),max為有符號數(shù),兩者是怎么比較的?。??
3 回答


八神花露水
TA貢獻(xiàn)35條經(jīng)驗(yàn) 獲得超103個贊
誰跟你說-1轉(zhuǎn)換為無符號整數(shù)是取它的補(bǔ)碼的,2^32+(-1)才是轉(zhuǎn)換后的結(jié)果。轉(zhuǎn)換后又用short int接收這么大的值,肯定又轉(zhuǎn)成負(fù)數(shù)了,之后你又以無符號整數(shù)形式 %u 打印負(fù)數(shù),當(dāng)然結(jié)果會變得很奇怪。不要給自己設(shè)坑,把里面的 short int 全部改為 int 結(jié)果應(yīng)該就正常了。
- 3 回答
- 0 關(guān)注
- 2650 瀏覽
添加回答
舉報
0/150
提交
取消