网站设计怎么样,网络服务器可提供的常见服务,手机购物网站设计,大连 网站维护详情关于整型提升、算数转换与截断见文章#xff1a;
《C语言#xff1a;整型提升》 《C语言#xff1a;算数转换》 一、代码一 int main() { char a -1; signed char b -1; unsigned char c -1; printf(%d %d %d, a, b, c); return 0; } 求… 详情关于整型提升、算数转换与截断见文章
《C语言整型提升》 《C语言算数转换》 一、代码一 int main() { char a -1; signed char b -1; unsigned char c -1; printf(%d %d %d, a, b, c); return 0; } 求输出结果 解析如下代码 int main()
{char a -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补首位作符号位//11111111111111111111111111111111111整型提升补//10000000 00000000 00000000 00000001整型提升原signed char b -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补首位作符号位//11111111111111111111111111111111111整型提升补//10000000 00000000 00000000 00000001整型提升原unsigned char c -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补首位作普通位//11111111111111111111111111111111111整型提升补//000000000000000000000000000011111111整型提升原printf(%d %d %d, a, b, c);//-1 -1 255return 0;
} 二、代码二 int main() { char a -128; printf(%u\n, a); return 0; } 求输出结果 解析如下代码 int main()
{char a -128;//10000000 00000000 00000000 10000000原//11111111 11111111 11111111 10000000补//10000000截断补首位作为符号位//%u是打印十进制无符号数//11111111 11111111 11111111 10000000整型提升补先整型提升最高位补符号位//11111111 11111111 11111111 10000000改无符号数补//11111111 11111111 11111111 10000000改无符号数原printf(%u\n, a);//4,294,967,168return 0;
} 三、代码三 int main() { char a 128; printf(%u\n, a); return 0; } 求输出结果 解析如下代码 int main()
{char a 128;//00000000 00000000 00000000 10000000原//00000000 00000000 00000000 10000000补//10000000截断补首位作为符号位//%u是打印十进制无符号数//11111111 11111111 11111111 10000000整型提升补最高位补符号位//11111111 11111111 11111111 10000000改无符号数补//11111111 11111111 11111111 10000000改无符号数原printf(%u\n, a);//4,294,967,168return 0;
} 四、代码四 int main() { int i -20; unsigned int j 10; printf(%d, i j); return 0; } 求输出结果 解析如下代码 int main()
{int i -20;//10000000 00000000 00000000 00010100原//11111111 11111111 11111111 11101100补//11111111 11111111 11111111 11101100算数转换补符号位当做普通位unsigned int j 10;//00000000 00000000 00000000 00001010原//00000000 00000000 00000000 00001010补//ij//11111111 11111111 11111111 11101100i算数转换后的补码//00000000 00000000 00000000 00001010j补码//11111111 11111111 11111111 11110110ij后的补码无符号数//%d是打印十进制有符号数//11111111 11111111 11111111 11110110ij后的补码改有符号数//10000000 00000000 00000000 00001010ij改有符号数后的原码printf(%d, i j);//-10return 0;
} 五、代码五 int main() { unsigned int i; for (i 9; i 0; i--) { printf(%u\n, i); } return 0; } 求输出结果 解析如下代码 int main()
{unsigned int i;for (i 9; i 0; i--){printf(%u\n, i);}//无符号数9到0正常输出//当i 0循环执行结束时i--即 i i - 1, i -1//-1需要改为无符号数//11111111 11111111 11111111 11111111 -1的补码//11111111 11111111 11111111 11111111 改无符号数后的补码//11111111 11111111 11111111 11111111 改无符号数后的原码//结果4,294,967,295//i又从4,294,967,295开始递减//每当i 0循环执行结束时i--又会回到4,294,967,295//所以程序死循环return 0;
} 运行结果如下陷入死循环