char(num % 10 +‘0‘)为什么就是对的?而char(num % 10 )就不对?

这是因为`char(num % 10 + '0')`和`char(num % 10)`在语义和结果上完全不同,具体原因如下:

### 1. **`num % 10`的含义**
`num % 10`计算的是`num`除以10的余数,结果是一个**整数**,范围是`0`到`9`。例如:
- 如果`num = 123`,那么`num % 10`的结果是`3`。
- 如果`num = 456`,那么`num % 10`的结果是`6`。

### 2. **`char(num % 10)`的问题**
`char(num % 10)`会将`num % 10`的结果(一个整数)直接转换为`char`类型。在C++中,`char`类型可以表示一个字符,但也可以表示一个**小整数**(通常是8位整数)。因此,`char(num % 10)`的结果是一个**字符类型的整数**,而不是我们期望的字符。

例如:
- 如果`num % 10`的结果是`3`,那么`char(3)`表示的是ASCII码为3的字符,而不是字符`'3'`。
- ASCII码表中,`3`对应的字符是一个控制字符(End of Text),而不是我们期望的数字字符`'3'`。

### 3. **`char(num % 10 + '0')`的正确性**
`'0'`在C++中是一个字符常量,其ASCII码值是`48`。当我们写`num % 10 + '0'`时,实际上是将`num % 10`的结果(一个整数)加上`48`,得到一个新的整数,然后将这个整数转换为`char`类型。

例如:
- 如果`num % 10`的结果是`3`,那么`3 + '0'`的结果是`3 + 48 = 51`。
- ASCII码表中,`51`对应的字符是`'3'`,这正是我们期望的数字字符。

因此,`char(num % 10 + '0')`会将`num % 10`的结果正确地转换为对应的数字字符。

### 4. **ASCII码表的作用**
ASCII码表定义了字符和整数之间的映射关系。在ASCII码表中:
- `'0'`的ASCII码值是`48`
- `'1'`的ASCII码值是`49`
- ...
- `'9'`的ASCII码值是`57`

通过加上`'0'`,我们可以将整数`0`到`9`映射到对应的字符`'0'`到`'9'`。

### 总结
- **`char(num % 10)`**:将`num % 10`的结果直接转换为`char`类型,得到的是一个字符类型的整数,而不是数字字符。
- **`char(num % 10 + '0')`**:将`num % 10`的结果加上`'0'`的ASCII码值,然后转换为`char`类型,得到的是对应的数字字符。

这就是为什么`char(num % 10 + '0')`是正确的,而`char(num % 10)`是错误的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值