首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言练习题

C语言练习题

作者头像
阑梦清川
发布2025-02-24 12:01:08
发布2025-02-24 12:01:08
1550
举报
文章被收录于专栏:学习成长指南学习成长指南

1.这个题目涉及到整型提升和截断

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	unsigned char a = 100;
	//00000000000000000000000011001000
	//11001000
	unsigned char b = 200;
	//00000000000000000000000001100100
	//01100100-----b
	//11001000-----a
	//00000000000000000000000100101100
	unsigned char c = 0;
	c = a + b;
	//00101100-------c-----44
	printf("%d %d", a + b, c);
	return 0;
}

a+b的打印结果是300,c的打印结果是44;

(1)分别用二进制表示100,200;

(2)因为100,200要放到无符号的字符类型里面去,而无符号的字符类型只能存放8个比特位,所以会发生截断现象;

(3)a+b时候,会发生整型提升,就是把其他的类型转换成int类型,因为a,b都是无符号的,所以就是高位全部补上0,也就是回到了截断前的二进制序列;

(4)执行加法,a+b就是对应位的数字相加,这样第九位就有了一个数字1;

(5)直接输出a+b,以%d的形式打印,就把这个序列当作有符号的,毫无疑问就是这个32比特位计算的值,也就是原来的100+200=300;

(6)放到c里面的话,就只能保留8个比特位(这样第9位的1就丢失了),打印的时候,需要进行整型提升,c是无符号的,只能高位补上0,高位时0则是正数,原码反码补码都一样,打印44;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档