逻辑非运算符 !

逻辑非运算符 ! 是三个逻辑运算符中唯一的一元运算符(只有一个操作数),作用是翻转逻辑值的真假状态。

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)转为小写(若已是则不变)转换后字符

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注