C语言中 有符号和无符号的数相加 怎么算?

2024-11-27 01:23:31
推荐回答(5个)
回答1:

主要是看你想用什么结果
如果是a+=b 就说明你想得到一个无符号数,那么结果就是249
因为-12是有符号数, 那么作为无符号数来说就是244所以244+5=249

同样如果想用的是有符号数的话那么-12+5=-7

当成有符号数没什么悬念,主要看
主要是无符号, 无符号-12为什么会是244
这是因为最高位为1的话说明这个数是有符号数.(当然还要看你是想把他当成什么数,这里你用的是有符号 ,所以他是-12 ),
如果只是单纯的从内存中看的话,他是1111 0100 即F4 作为十进制来表示的话可以是-12也可以是244 完全看你选择是否有符号来表示了
不懂再追问吧...

回答2:

这里是unsigned char和signed char求和,根据标准,加法的两侧操作数在可能的情况下会提升为共同类型,通常是int,那么此时会转换为计算

(int)A + (int)B

结果是int类型的-7


当然在赋值给某个类型的情况下,还会做转换。若赋值给int,那么就是-7,若赋值给unsigned int,那么结果是2^n - 7,这里n是unsigned int的位数,通常是32。

回答3:

记得无符号与有符号加减时无符号会被先转换为有符号,然后就是简单的有符号加减了,所以A+B=-7

回答4:

默认char类型会转换成int类型然后进行处理的,如果2个操作数中有unsigned类型的默认将两个数都当做unsigned进行处理,然后看你的结果类型了~如果你的结果是有符号的结果值将被隐式转换为有符号的,结果为无符号的就是无符号的
计算机内用补码,自然会产生环,以上结果对计算机而言内部存储的二级制都是同一个就看你怎么用了

回答5:

-7啊 

#include 

int main()
{
unsigned char A;
signed char B;
A=5;

B=-12;

printf("%d" ,A+B);

return 0;
}
-7Press any key to continue

你说的这个问题只能说是看用什么接收了 
现在-7 如果用无符号的接收就会出问题
#include 

int main()
{
unsigned char A;
signed char B;

A=5;

B=-12;
A = A+B;
printf("%d" ,A);

return 0;
}
249Press any key to continue