Skip to content

Commit 7155a60

Browse files
committed
Update: improve clarity and precision in documentation for type conversion and bitwise expressions
1 parent 26e3a69 commit 7155a60

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

src/zh/02-program-structure/declaration.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,18 +125,18 @@ int a = 'a';
125125
::: info int 与 char 的转换
126126
`int``char` 显然有着不同的大小,更小的 `char` 的值无法与 `int` 的值产生对应,因此需要一定的规则来进行转换。
127127

128-
假设 `int` 的大小是2字节,1字节的比特数是8,那么 `int` 的值范围是`[-2^15, 2^15-1]`,也即`[-32768, 32767]`。此外,再假设 `char` 是有符号的,那么 `char` 的值范围是`[-2^7, 2^7-1]`,也即`[-128, 127]`
128+
假设 `int` 的大小是2字节,1字节的位数是8,那么 `int` 的值范围是`[-2^15, 2^15-1]`,也即`[-32768, 32767]`。此外,再假设 `char` 是有符号的,那么 `char` 的值范围是`[-2^7, 2^7-1]`,也即`[-128, 127]`
129129

130130
C++ 规定,`int`使用补码表示,因此,`int``-1` 表示为 `0b1111111111111111`
131131

132-
当从 `char` 转换到 `int` 时,`char` 的值会被扩展到 `int` 的大小,此时会发生符号扩展。例如,`char` 的值`-1`其比特为`0b11111111`。会被扩展为`int` 的值`-1``0b1111111111111111`),而不是`255`(`0b0000000011111111`)。
132+
当从 `char` 转换到 `int` 时,`char` 的值会被扩展到 `int` 的大小,此时会发生符号扩展。例如,`char` 的值`-1`其二进制表示为`0b11111111`。会被扩展为`int` 的值`-1``0b1111111111111111`),而不是`255`(`0b0000000011111111`)。
133133

134-
当从 `int` 转换到 `char` 时,`int` 的值会被截断到 `char` 的大小,此时会按照字节宽度取余。例如,`int` 的值`193`其比特为`0b0000000110000001`。会被截断为`char` 的值 `-63``0b10000001`)。
134+
当从 `int` 转换到 `char` 时,`int` 的值会被截断到 `char` 的大小,此时会按照字节宽度取余。例如,`int` 的值`193`其二进制表示为`0b0000000110000001`。会被截断为`char` 的值 `-63``0b10000001`)。
135135

136136

137-
这里为了方便表述,假设了 `int` 为2字节,否则在描述比特的时候就会写出过多的0和1。对于常见的4字节 `int` 的情况,这里的规则是通用的,只是数值范围会有所不同。
137+
这里为了方便表述,假设了 `int` 为2字节,否则在描述二进制表示的时候就会写出过多的0和1。对于常见的4字节 `int` 的情况,这里的规则是通用的,只是数值范围会有所不同。
138138

139-
此外,在特定实现中,`char` 可能是无符号的,这会导致 `0b0000000110000001` 被截断为 `193` ,而不是 `-63`但比特位上的结果是一样的 `0b10000001`
139+
此外,在特定实现中,`char` 可能是无符号的,这会导致 `0b0000000110000001` 被截断为 `193` ,而不是 `-63`但二进制表示上的结果是一样的 `0b10000001`
140140
:::
141141

142142
## 快速练习

src/zh/02-program-structure/expression/logic-expr.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ title: 2.2.8 按位逻辑表达式、逻辑表达式
2020

2121
### 按位逻辑表达式的计算
2222

23-
按位逻辑表达式的计算是将 `&``^``|` 左右两边的值按每一位分别进行逻辑运算的结果
23+
按位逻辑表达式的计算是将 `&``^``|` 左右两边的值按**每一位**(bit)分别进行逻辑运算的结果
2424

25-
对于一个比特而言
26-
- 按位与的结果是两个比特都为1时结果为1,否则为0。
27-
- 按位或的结果是两个比特都为0时结果为0,否则为1。
28-
- 按位异或的结果是两个比特相同时结果为0,否则为1。
25+
计算结果的第N位满足
26+
- **按位与**:两个操作数的第N位都为1时,结果为1,否则为0。
27+
- **按位或**:两个操作数的第N位都为0时,结果为0,否则为1。
28+
- **按位异或**:两个操作数的第N位相同时,结果为0,否则为1。
2929

3030
例如:
3131
```cpp

src/zh/02-program-structure/expression/shift-expr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ title: 2.2.6 移位表达式
1010
其中,`<<` 表示左移,`>>` 表示右移。
1111

1212
### 移位表达式的计算
13-
移位表达式计算的值是将 `<<``>>` 左边的值按照右边的值指定的比特数(位数)进行移位操作的结果。例如:
13+
移位表达式计算的值是将 `<<``>>` 左边的值按照右边的值进行移位操作的结果。例如:
1414
```cpp
1515
42 << 2 // 值为 168
1616
```

0 commit comments

Comments
 (0)