从键盘上输入三个短整型数,分别存放到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: 4294967295max(input):5 min(input):-1我觉得很奇怪为什么实际上5对应的无符号数应该是最小的才对,-1才是最大的,输出出来为什么正好相反??我觉得是不是跟我的变量定义有关?max=c,c为无符号数,max为有符号数,两者是怎么比较的啊??
3 回答
八神花露水
TA贡献35条经验 获得超103个赞
谁跟你说-1转换为无符号整数是取它的补码的,2^32+(-1)才是转换后的结果。转换后又用short int接收这么大的值,肯定又转成负数了,之后你又以无符号整数形式 %u 打印负数,当然结果会变得很奇怪。不要给自己设坑,把里面的 short int 全部改为 int 结果应该就正常了。
- 3 回答
- 0 关注
- 2563 浏览
添加回答
举报
0/150
提交
取消