请教一个C语言的补码问题!!!!十分感谢

来源:百度知道 编辑:UC知道 时间:2024/06/08 06:25:03
#include <stdio.h>
main()
{
char a1,b1
unsigned char a2,b2
a1=127,b1=129;
a2=127;b2=129;
prinft("a1=%d,a2=%u,b1=%d,b2=%u\n",a1,a2,b1,b2);

char的取值范围是-128到127
那么输出的时候,a1=127,a2=127,b1就超出char的范围了,溢出了,溢出
怎么算呢?b2=129(因为unsigned char范围是0-255)
大家帮帮我把,。我还是不明白啊!!!谢谢啊!!!!

b1是129 机器码为10000001
传给b1时传的就是机器码了,所以直接把b1认为是个负值了,根据负值的转换b1的二进制码是11111111(注意不是机器码)。所以b1算出来是-127

转成二进制,取低8位(第8位为符号位)

溢出了,就是溢出了, 没什么怎么算的。要么显示错误,要么显示溢出部分的数。

你这题有问题

字符型赋整形值?

假设成立 b1 = (b1 - 127) - 129