逻辑非运算符 ! 是三个逻辑运算符中唯一的一元运算符(只有一个操作数),作用是翻转逻辑值的真假状态。
1. 基本规则
| 原值 | ! 结果 |
|---|---|
| true(非0) | false(0) |
| false(0) | true(1) |
示例:
int a = 5, b = 2;
// a > b 为 true (1)
// !(a > b) 为 false (0)Code language: JavaScript (javascript)
2. 使用建议与注意事项
- 可读性警告:
!容易让代码难以理解,尤其是连续嵌套时(如!!flag、!(a && !b)),建议谨慎使用。 - 常见用途:
- 取反条件:
if(!condition)等价于if(condition == 0) - 配合
bool变量:bool is_valid = false; if(!is_valid) { ... } - 指针判空:
if(!ptr)等价于if(ptr == NULL)
- 取反条件:
3. 综合练习:大写字母转小写(使用 && 与 ctype.h)
需求:提示用户输入一个大写字母,验证类型正确后输出对应小写字母,否则报错。
版本一:手动判断 ASCII 范围(使用 &&)
#include <stdio.h>
int main(void)
{
char letter = 0; /* 存储输入字符 */
printf("请输入一个大写字母:");
scanf(" %c", &letter);
if ((letter >= 'A') && (letter <= 'Z')) /* 验证是否是大写字母 */
{
letter += 'a' - 'A'; /* 转换为小写(加32) */
printf("你输入的大写字母对应的小写字母 %c.\n", letter);
}
else
printf("你输入的不是大写字母.\n");
return 0;
}Code language: PHP (php)
版本二:使用 ctype.h 标准库函数(推荐)
#include <stdio.h>
#include <ctype.h>
int main(void)
{
char letter = 0;
printf("请输入一个大写字母:");
scanf(" %c", &letter);
if (isalpha(letter) && isupper(letter)) /* 既是字母又是大写 */
{
printf("你输入的大写字母对应的小写字母 %c.\n", tolower(letter));
}
else
printf("你输入的不是大写字母.\n");
return 0;
}Code language: PHP (php)
ctype.h 常用函数对照:
| 函数 | 功能 | 返回值 |
|---|---|---|
isalpha(c) | 判断是否为字母(A~Z 或 a~z) | 非0 为真 |
isupper(c) | 判断是否为大写字母 | 非0 为真 |
islower(c) | 判断是否为小写字母 | 非0 为真 |
toupper(c) | 转为大写(若已是则不变) | 转换后字符 |
tolower(c) | 转为小写(若已是则不变) | 转换后字符 |