在C语言中,条件表达式 `!k` 的等价性取决于变量 `k` 的类型,具体如下:
整型(int)
- 当 `k` 为 `0` 时,`!k` 为 `1`(真);
- 当 `k` 不为 `0` 时,`!k` 为 `0`(假)。
字符型(char)
- 当 `k` 为 `'\0'`(空字符,值为0)时,`!k` 为 `1`(真);
- 当 `k` 为其他字符时,`!k` 为 `0`(假)。
布尔型(bool)
- 在C语言标准中,布尔类型未明确定义,但通常用 `0` 表示 `false`,非零值表示 `true`。因此,`!k` 等价于 `k == false`。
补充说明
逻辑非运算符 `!` 会将操作数转换为布尔值:
`0` → `true`
非零值 → `false`
在 `while(!k)` 循环中,循环体会在 `k` 为 `0`(或 `'\0'`)时停止执行。
示例
```c
int k = 0;
while (!k) {
printf("循环执行,k = %d\n", k);
k++;
}
// 输出: 循环执行,k = 0
```
在上述示例中,当 `k` 为 `0` 时,`!k` 为真,循环终止。