zoukankan      html  css  js  c++  java
  • C语言的布尔类型(_Bool)

    也许很多人都和我一样,不知道现在的C语言已经有了布尔型:从C99标准开始,类型名字为“_Bool”。

            在此之前的C语言中,使用整型int来表示真假。在输入时:使用非零值表示真;零值表示假。在输出时:真的结果是1,假的结果是0;(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,也就是其它类型转化为布尔类型时,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式返回的结果,也就是布尔类型转化为其他类型时,比如 a==b的返回结果,只有0和1两种可能)。

            所以,现在只要你的编译器支持C99(我使用的是Dev C++4.9.9.2),你就可以直接使用布尔型了。另外,C99为了让CC++兼容,增加了一个头文件stdbool.h。里面定义了booltruefalse,让我们可以像C++一样的定义布尔类型。

    1. 我们自己定义的“仿布尔型”

            在C99标准被支持之前,我们常常自己模仿定义布尔型,方式有很多种,常见的有下面两种:

    1. /* 第一种方法 */  
    2. #define TRUE 1  
    3. #define FALSE 0  
    4.   
    5.   
    6. /* 第二种方法 */   
    7. enum bool{falsetrue};   

    2. 使用_Bool

            现在,我们可以简单的使用 _Bool 来定义布尔型变量。_Bool类型长度为1,只能取值范围为0或1。将任意非零值赋值给_Bool类型,都会先转换为1,表示。将零值赋值给_Bool类型,结果为0,表示。 下面是一个例子程序。

    1. #include <stdio.h>   
    2. #include <stdlib.h>    
    3.   
    4. int main(){  
    5.     _Bool a = 1;  
    6.     _Bool b = 2;    /* 使用非零值,b的值为1 */   
    7.     _Bool c = 0;  
    8.     _Bool d = -1;   /* 使用非零值,d的值为1 */   
    9.       
    10.     printf("a==%d,  /n", a);  
    11.     printf("b==%d,  /n", b);  
    12.     printf("c==%d,  /n", c);  
    13.     printf("d==%d,  /n", d);  
    14.   
    15.     printf("sizeof(_Bool) == %d  /n"sizeof(_Bool));  
    16.       
    17.     system("pause");  
    18.     return EXIT_SUCCESS;  
    19. }  

    运行结果如下:(只有0和1两种取值)

    1. a==1,  
    2. b==1,  
    3. c==0,  
    4. d==1,  
    5. sizeof(_Bool) == 1  

    3. 使用stdbool.h

            在C++中,通过bool来定义布尔变量,通过truefalse对布尔变量进行赋值。C99为了让我们能够写出与C++兼容的代码,添加了一个头文件<stdbool.h>。在gcc中,这个头文件的源码如下:(注,为了清楚,不重要的注释部分已经省略)

    1. /* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. 
    2.         This file is part of GCC. 
    3.  */  
    4.   
    5. #ifndef _STDBOOL_H  
    6. #define _STDBOOL_H  
    7.   
    8. #ifndef __cplusplus  
    9.   
    10. #define bool    _Bool  
    11. #define true    1  
    12. #define false   0  
    13.   
    14. #else /* __cplusplus ,应用于C++里,这里不用处理它*/  
    15.   
    16. /* Supporting <stdbool.h> in C++ is a GCC extension.  */  
    17. #define _Bool   bool  
    18. #define bool    bool  
    19. #define false   false  
    20. #define true    true  
    21.   
    22. #endif /* __cplusplus */  
    23.   
    24. /* Signal that all the definitions are present.  */  
    25. #define __bool_true_false_are_defined   1  
    26.   
    27. #endif  /* stdbool.h */  

             可见,stdbool.h中定义了4个宏,bool、true、false、__bool_true_false_are_defined。 其中bool就是 _Bool类型,true和false的值为1和0,__bool_true_false_are_defined的值为1。 
    下面是一个例子程序

    1. #include <stdio.h>   
    2. #include <stdlib.h>   
    3. #include <stdbool.h>  
    4.   
    5. /* 测试C99新添加的头文件 stdbool.h */  
    6.   
    7. int main(){  
    8.     bool m = true;  
    9.     bool n = false;  
    10.     printf("m==%d,  n==%d  /n", m, n);  
    11.       
    12.     printf("sizeof(_Bool) == %d  /n"sizeof(_Bool));  
    13.   
    14.     system("pause");  
    15.     return EXIT_SUCCESS;  
    16. }  

    执行结果为:

    1. m==1,  n==0  
    2. sizeof(_Bool) == 1  

       

  • 相关阅读:
    cxgrid动态创建列
    cxgrid显示海量数据
    Delphi 两个应用程序(进程)之间的通信
    Delphi实现窗体内嵌其他应用程序窗体
    Change tab position of PageControl to bottom
    how can I make the login form transparent?
    UniDBGrid增加显示记录数的label及隐藏refresh按钮
    java工厂模式实例化class
    Java 语言细节
    applet示例 WelcomeApplet.java <Core Java>
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332715.html
Copyright © 2011-2022 走看看