(新手笔记)关于char类型的运算

文章讨论了char类型在编程中的行为,特别是在与整数类型运算时,由于CPU架构限制,即使是char类型的相加也涉及整形提升和字节转换。它强调了通用CPU如何处理不同长度的整数,并指出printf函数在处理这类情况时的不同行为。
摘要由CSDN通过智能技术生成

1.首先明确char类型变量是整数类型变量的一员,字符都是由ASC码代表的。

2.一个char一个字节(8个比特位),小于等于int类型的变量进行运算时首先进行整形提升(

表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀ 般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。
因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓
度。
通⽤CPU(general-purpose CPU)是难以直接实现两个8⽐特字节直接相加运算(虽然机器指令中
可能有这种字节相加指令)。所以,表达式中各种⻓度可能⼩于int⻓度的整型值,都必须先转换为
int或unsigned int,然后才能送⼊CPU去执⾏运算)。

 

3.char类型会发生截断和整形提升,
上图中的实例
C1、C2在运算前先发生整形提升,得到c3 00000000 00000000 00000000 10000111,
然后截断变回一个字节的大小10000111存储在c3中,在printf语句中需要访问时又发生整形提升,再由补码变回原码,大小为-121(一个没有对应字符的ASC||码数值)
但如果直接打印printf("%d",c1+c2);那么结果就是135(1000 0111),不会发生整形提升,%d 是直接打印有符号的整数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值