不同类型的变量与零究竟是如何比较(1)

简介: 不同类型的变量与零究竟是如何比较

1、什么是表达式、什么是语句

1.1什么是表达式

C语言中,用各种操作符把变量连起来,形成有意义的式子,就叫做表达式 。例如:a = b + c

1.2什么是语句  

在表达式后面加上一个分号,就形成了一个语句 。例如:a = b + c;

当然也不仅仅只有表达式后面加了分号的语句,还有类似与输入 输出 函数调用 等等语句。例如:scanf("%d",&a);  printf("%d",a); add(a,b);

只有一个分号  ;  的叫做 空语句

C语言中,用一对大括号 {} 括起来的多条语句称为复合语句,复合语句在语法上被认为是一条语句

注:大家只用记住语句是由分号结尾即可,除了复合语句


2.判断语句 是如何执行的

1.1  if

q1.png


首先执行表达式,表达式的值为真就执行 if 里面的语句,为假则不执行


1.2 单分支

q2.png


首先执行表达式,表达式的值为真就执行 if 里面的语句1,为假则执行else 里面的 语句2


1.3多分支

q3.png

首先判断表达式1,表达式1的值为真就执行 if 里面的语句1,为假则判断else if 里面的表达式2,表达式2的值为真则执行else if 里面语句2,为假则执行 else 里面的语句3


1.4嵌套

q4.png

首先判断表达式1,表达式1的值为真就执行 if 里面的语句1 然后判断里面的表达式x ,若表达式x为真则执行语句x,表达式x为假执行语句y 。表达式1为假则判断else if 里面的表达式2,表达式2的值为真则执行else if 里面语句2,表达式2为假则执行 else 里面的语句3


结论:


if 语句执行,先执行完成表达式的值,得到逻辑结果,在进行判定

C中0表示假,非0表示真

3.bool 变量与"零值"进行比较

3.1 C语言中有没有bool类型?

思考:C语言中有没有bool类型?


答案:c99 之前没有 bool 类型,主要是 c90 没有。但 c99 引入了_Bool 类型(_Bool 是一个类型,不过在新增头文件stdbool.h中,被重新用宏写成了 bool,为了保证C/C++兼容性)。


w1.png


bool 是一个真假类型:true 为真,false 为假


3.2 bool类型的变量占几个字节?

w2.png


上面测试中,我们可以看出 bool 类型的变量占一个字节 。


w3.png


小伙伴看到这可能就疑惑了,为什么大写的 BOOL 、TRUE 也可以运行,而且它的大小还是四个字节呢?那我们转到它的定义看看



q1.png

现在我们就知道为什么大写 BOOL 类型的变量占四个字节了,因为在源代码中,是这么定义的:typedef  int   BOOL;


注:这都是 Microsoft 自己搞的一套BOOL值。在vs中转到BOOL对应的头文件,翻到最上面,就能看到微软的版权信息。使用 BOOL 需要添加 #include 头文件。


我们一般写代码不仅仅是需要在自己使用的平台可以使用,还需要在其他平台可以使用,所以这就涉及到了跨平台,而 Microsoft 定义的专属类型,其他平台不支持,所以也就不支持使用


总结:


优先使用c90,就是我们之前以及后面一直用的方式(虽然c90并不支持 bool 类型,但它可以用整型表示真和假 ,0 为假 、非 0 为真)

万一非得使用bool,推荐c99标准,不推荐MS自定义。  

3.3 bool值与0比较如何比较?

#include<stdio.h>
#include<stdbool.h>
int main()
{
  bool a = true;
  if (1 == a)
  {
  printf("1\n");
  }
  if (true == a)
  {
  printf("2\n");
  }
  if (a)//推荐
  {
  printf("3\n");
  }
  return 0;
}


为什么推荐第3个 if 的写法呢?


答: a 本身就是是一个 bool 类型的值,本来就代表的真或假。


结论:bool类型,直接判定,不用操作符进行和特定值比较



相关文章
|
7月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
1195 13
|
10月前
|
JSON 前端开发 安全
WebSocket调试工具深度对比:Postman与Apipost功能实测解析
如果你在寻找既能搞定WebSocket调试,又能完美管理文档的工具,不妨试试Apipos!
400 1
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放
|
开发框架 Java 开发者
processing完整教程
本文提供了一个关于Processing的完整教程,包括下载、启动Processing、基本编程示例、颜色使用以及如何打印调试信息,适合初学者快速上手Processing编程。
1919 2
|
设计模式 Go
Go语言事件系统设计解析:发布-订阅模式实战
Go语言事件系统设计解析:发布-订阅模式实战
854 0
|
存储 关系型数据库 MySQL
Nacos的单机以及集群部署模式
Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。
618 0
|
存储 运维 监控
泛娱乐游戏技术服务与业务最佳实践
1、前言中国作为世界消费人口、消费水平最高的国家之一,特别近几年的新冠疫情局势,加快了互联网行业数字化进程,促进了中国泛娱乐发展加速、再加速。回头望去,互联网从搜狐、新浪为代表的门户冲浪,到腾讯QQ、微博社交娱乐,从游戏单机时代到网游时代,娱乐媒介也逐步从PC端向手机端演进,再加上基础网络2G到5G的大规模升级迭代,泛娱乐也加入了更多的直播、短视频元素,引申种类繁多的泛娱乐形式。负责“连接一切”的
965 1
泛娱乐游戏技术服务与业务最佳实践
|
关系型数据库 MySQL 索引
MySQL -- 联合索引 使用原则
MySQL -- 联合索引 使用原则
373 0
|
SQL 数据采集 JSON
Pandas常用操作命令(一)
Pandas常用操作命令(一)