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

请哪位知情认识麻烦分析分析!多谢!
展开
 我来答
游戏放松小助手
高粉答主

2020-12-18 · 我是游戏小达人,乐于助人
游戏放松小助手
采纳数:32 获赞数:76877

向TA提问 私信TA
展开全部

1、首先在电脑中打开devc++编辑器,定义一个变量a,如下图所示。

2、接着再定义一个变量b,如下图所示。

3、然后定义一个变量c,c=a+b%(a+b)/a+a*b-b,这里的运算顺序是先计算a+b,然后再计算b%(a+b)/a和a*b。

4、再将这个c的结果计算出来,点击运行。

5、这时候就可以看到结果了,如下图所示。

百度网友8c228cdf2
推荐于2017-09-13 · 超过14用户采纳过TA的回答
知道答主
回答量:29
采纳率:100%
帮助的人:14.1万
展开全部
因为你的输入全部是十六进制输入的,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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阔气克克
2015-03-20 · TA获得超过485个赞
知道小有建树答主
回答量:527
采纳率:0%
帮助的人:466万
展开全部
本来short int是-32768~32767,你加上unsigned的之后,负数的部分就都变成正数了,然后使用的都是补码,-1自然就变成最大值了。查查补码和无符号整数的含义你就懂了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式