IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C/C++实操 - True and false -> 正文阅读

[C++知识库]C/C++实操 - True and false

在C11标准文档中,规定了关系运算符 <、> 、<= 、>=的运算结果,真时返回1,假时返回0,返回类型为整型。
运算符==、!=和关系运算符类似,除了运算优先级较低以外,也是返回1或0。
真(True)的定义是非0,所以假(False)的定义就是整型的0值。
C语言本身只有一个_Bool定义,是一个关键字。
_Bool类型是一个对象,存储0和1两个值,是一个无符号的整型。
如下程序所示,_Bool只有0和1,即假和真两个值,赋值时非0都看作1。
任何一个标量值给_Bool类型变量赋值,如果等于0,赋值为0,否则就赋值为1。
#include <stdio.h>
int main()
{
??_Bool varA;
? varA = 2;
? printf("varA:%d.\n",varA);
? varA = -1;
? printf("varA:%d.\n",varA);
? varA = 0;
? printf("varA:%d.\n",varA);
? printf("Hello world!\n");
? return 0;
}

$ gcc -o tof tof.c
$ ./tof
varA:1.
varA:1.
varA:0.
Hello world!

为了更方便程序员对布尔类型的使用,C语言的标准库,头文件<stdbool.h>,定义了和布尔操作相关的类型。
stdbool.h
?
/* Copyright (C) 1998, 1999, 2000, 2009 Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
GCC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.??See the
GNU General Public License for more details.
Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.
You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively.??If not, see
<Licenses- GNU Project - Free Software Foundation>.??*/
/*
* ISO C Standard:??7.16??Boolean type and values??<stdbool.h>
*/
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool????????_Bool
#define true????????1
#define false????????0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension.??*/
#define _Bool????????bool
#define bool????????bool
#define false????????false
#define true????????true
#endif /* __cplusplus */
/* Signal that all the definitions are present.??*/
#define __bool_true_false_are_defined????????1
#endif????????/* stdbool.h */
?

C里的头文件,stdbool.h,定义了bool类型,其实就是_Bool。
并定义了true为1,false为0,方便使用。
这几个宏按照上面的定义展开为类型_Bool以及常数1和0。
使用了stdbool.h的C程序:
#include <stdio.h>
#include <stdbool.h>
int main()
{
??bool varA;
? varA = 2;
? printf("varA:%d.\n",varA);
? varA = -1;
? printf("varA:%d.\n",varA);
? varA = 0;
? printf("varA:%d.\n",varA);
? varA = true;
? printf("varA:%d.\n",varA);
? varA = false;
? printf("varA:%d.\n",varA);
? printf("Hello world!\n");
? return 0;
}

$ gcc -o tof tof.c
$ ./tof
varA:1.
varA:1.
varA:0.
varA:1.
varA:0.
Hello world!
同时我们看到了stdbool.h里面还使用了__cplusplus这个C++编译器的宏开关,如果使用C++编译器来编译C程序时,就是用下面的宏定义。
这时定义了4个,bool、false、和true都原封不动,说明C++语言本身自带定义。而_Bool转换为bool,表明C++里没有_Bool,转而使用bool。
====================================?
下面我们来看一下C++里面的true、false的定义:
查看C++11标准文档,C++里bool、true、false都是关键字。
true、false是字面常量,bool类型的变量值是true或者false。
如下程序所示:
#include <stdio.h>
int main()
{
??bool varA;
? printf("false:%d,true:%d.\n", false, true);
? varA = 2;
??printf("varA:%d.\n", varA);
??varA = -1;
??printf("varA:%d.\n", varA);
??varA = 0;
??printf("varA:%d.\n", varA);
??printf("Hello world!\n");
? return 0;
}

$ g++ -o tofplus tof.cpp
$ ./tofplus
false:0,true:1.
varA:1.
varA:1.
varA:0.
Hello world!

false是0,true是1。
bool类型变量的值只能是0或1。
注意:
1,关于大写的TRUE和FALSE定义,在C/C++语言和标准库里都没有定义,程序中使用的都是单独添加的。
2,本文使用的gcc版本:gcc version 9.3.0,Ubuntu虚拟机下编辑编译的示例代码。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:54:18  更:2021-09-27 13:55:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 3:54:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计