c语言中unsigned short的运算
intmain(){unsignedshortinput_1=0;unsignedshortinput_2=0;unsignedshortvalue=0;while(1)...
int main()
{
unsigned short input_1 = 0;
unsigned short input_2 = 0;
unsigned short value = 0;
while(1)
{
printf("first num: ");
scanf("%x",&input_1);
printf("second num :");
scanf("%x",&input_2);
value = input_1 - input_2;
printf("value = %d\n\n", value);
}
现象比较奇怪,打印结果如下:
first num: 1
second num :2
value = 65534
first num: 200
second num :100
value = 65280
first num: 399
second num :100
value = 65280
first num: 3
second num :2
value = 65534
first num: 8
second num :2
value = 65534
请哪位知情认识麻烦分析分析!多谢! 展开
{
unsigned short input_1 = 0;
unsigned short input_2 = 0;
unsigned short value = 0;
while(1)
{
printf("first num: ");
scanf("%x",&input_1);
printf("second num :");
scanf("%x",&input_2);
value = input_1 - input_2;
printf("value = %d\n\n", value);
}
现象比较奇怪,打印结果如下:
first num: 1
second num :2
value = 65534
first num: 200
second num :100
value = 65280
first num: 399
second num :100
value = 65280
first num: 3
second num :2
value = 65534
first num: 8
second num :2
value = 65534
请哪位知情认识麻烦分析分析!多谢! 展开
3个回答
展开全部
因为你的输入全部是十六进制输入的,1-2原本等于-1,但是无符号整形没有负数,所以就是65535-1=65534,其他的你输入399其实并不是10进制的399,而是16进制的399,所以值是有差异的,要想知道结果,把他们转成10进制就可以了。问题主要还是不同数据类型数据的范围问题,好好研究一下不同数据类型的范围。
整型 [signed]int -2147483648~+2147483648
无符号整型unsigned[int] 0~4294967295
短整型 short [int] -32768~32768
无符号短整型unsigned short[int] 0~65535
长整型 Long int -2147483648~+2147483648
无符号长整型unsigned [int] 0~4294967295
字符型[signed] char -128~+127
无符号字符型 unsigned char 0~255
单精度 float 3.4 x 10^(-38)~ 3.4 x 10^(+38)
双精度double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
长双精度 long double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
和编译器也有关系,我的电脑1-2,输出结果为65535
整型 [signed]int -2147483648~+2147483648
无符号整型unsigned[int] 0~4294967295
短整型 short [int] -32768~32768
无符号短整型unsigned short[int] 0~65535
长整型 Long int -2147483648~+2147483648
无符号长整型unsigned [int] 0~4294967295
字符型[signed] char -128~+127
无符号字符型 unsigned char 0~255
单精度 float 3.4 x 10^(-38)~ 3.4 x 10^(+38)
双精度double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
长双精度 long double 1.7 x 10^(-308)~ 1.7 x 10^(+308)
和编译器也有关系,我的电脑1-2,输出结果为65535
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本来short int是-32768~32767,你加上unsigned的之后,负数的部分就都变成正数了,然后使用的都是补码,-1自然就变成最大值了。查查补码和无符号整数的含义你就懂了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询