c语言 为什么
发布网友
发布时间:2022-03-08 09:08
我来回答
共3个回答
热心网友
时间:2022-03-08 10:37
结果是-35
char的范围是-128~+127,221超过了这个范围,发生溢出
221的二进制表示是11011101
char占8位,按照char型的值,最高位表示符号,1表示负
计算机里的数用补码存,转成int就是-35
在char的范围内可以理解成127+1=-128,也就是溢出后变成最小的数
221=127+94=127+1+93=-128+93=-35
热心网友
时间:2022-03-08 11:55
main()
{
char c=221;
char m=228;
int x;
long y;
x=c;
y=x;
//由于char 是-128到127的数值 所以 221其实转化成int是:-35 [ char x=127+1;x在int下 就是-128;
//128 --> -128
//129 --> -127
//130 --> -126
//... ...
//221 --> -35
printf("c=%d,x=%d,y=%ld\n",m,x,y);
}
结果:
x=-35,y=-35
热心网友
时间:2022-03-08 13:30
x=-221
//因为%d是控制c11以十进制有符号形式输出,而211存储在字符变量中是如下2进制形式:
1000 0000 当你按%d格式输出后,printf函数会对字符数值进行扩展将最高位视为符号位,而这个数值正好是有符号8位2进制数表示的-211,因此输出-211