精华内容
下载资源
问答
  • 因为许多程序需要变量能存储真值或假值,所以C语言缺少适当的布尔类型可能会很麻烦。一直采用模拟布尔型变量的方法来解决麻烦,这种模拟的方法是先声明int型变量,然后将其赋值0或1。 int flag; flag = 0; ... flag ...

    宏定义

    因为许多程序需要变量能存储真值假值,所以C语言缺少适当的布尔类型可能会很麻烦。一直采用模拟布尔型变量的方法来解决麻烦,这种模拟的方法是先声明int型变量,然后将其赋值0或1。

    int flag;
    flag = 0;
    ...
    flag = 1;
    

    虽然这种方法可行,但是对于程序的可读性没有多大的贡献,因为没有明确地表示flag的赋值只能是布尔值,并且也没明确指出0和1表示假和真。
    为了使程序更加便于理解,一个好的方法是类似于TRUE和FALSE这样的名字来定义宏。

    #define TRUE 1
    #define FALSE 2
    

    现在对flag的赋值有了更加自然的形式。

    flag = FALSE;
    ...
    flag = TRUE;
    

    为了判断flag是否为真,可以写成

    if(flag == TRUE)
    ...
    

    或者只写成

    if(flag)
    ...
    

    为了判断flag是否为假,可以写成

    if(flag == FALSE)
    ...
    

    或者只写成

    if(!flag)
    ...
    

    为了进一步实现这个想法,甚至可以定义用作类型的宏

    #define BOOL int;
    

    声明布尔型变量时可以用BOOL代替int:

    BOOL flag;
    

    类型定义

    上个标题中我们用#define指令创建了一个宏,可以用来定义布尔型数据:

    #define BOOL int;
    

    但是,一个更好的设置布尔型的方法是所谓的类型定义(type define)的特性:

    typedef int Bool;
    

    注意

    1. 定义的类型名放在后面
    2. 将首字母大写不是必须的,只是一些C程序员的习惯。

    类型定义使得程序更易于理解,例如cash_in和cash_out都用来存储美元数量,我们可以将Dollars声明成

    typedef float Dollars;
    
    Dollars cash_in,cash_out;
    

    问题:用typedef和用作类型的宏定义#define Dollars float有什么区别?

    1. 作用域不同,#define在预处理时进行,作用于全局,typedef可作用于局部
    2. 实现效果不一定相同
    #include <stdio.h>
    #include <typeinfo>
    #define POINTER int*
    typedef int* Pointer2;
    
    int main(){
    	
    	int* a1,a2,a3,a4; 
    	POINTER p1,p2,p3,p4;		
    	Pointer2 p5,p6,p7,p8;
    	
    	printf("%s %s %s %s\n",typeid(a1).name(),typeid(a2).name(),typeid(a3).name(),typeid(a4).name());
    	printf("%s %s %s %s\n",typeid(p1).name(),typeid(p2).name(),typeid(p3).name(),typeid(p4).name());
    	printf("%s %s %s %s\n",typeid(p5).name(),typeid(p6).name(),typeid(p7).name(),typeid(p8).name());
    	
    	return 0;
    }
    

    运行上面的测试程序
    输出结果为:
    在这里插入图片描述
    可见宏定义是简单的字符替换,当声明指针变量int*时,由于C语言的规范,一次只能声明一个,后续声明的变量将为int型,宏定义后效果也是如此。但typedef更彻底地将int*视为一个类型。

    承接上述的

    typedef float Dollars;
    
    Dollars cash_in,cash_out;
    

    这样的写法比下面的写法更有意义:

    float cash_in, cash_out;
    

    优点:

    1. 类型定义还可以使程序更容易修改。如果之后决定Dollars的实际应用类型修改为double,则只需要修改类型定义就足够了:typedef double Dollars
      如果不使用类型定义,则需要找出表示美元的变量并把声明中的float修改成double。
      (这个有点宏定义也是可以实现的,不过类型定义不是全局的,修改起来更灵活)
      类型定义是编写可移植程序的一种重要工具。程序从一台计算机移动到另一台计算机可能引发的问题之一就是不同计算机相同类型的取值范围(机器码位数)可能不同。如果i是int型变量,那么赋值语句i = 100000;在一台使用32位整数的计算机上是没问题的,但是在一台使用16位整数的计算机上就会出错。简单口算一下32*1024(-215~215)<40000 无法表示100000。

    2. 可移植性技巧
      为了更大的可移植性,可以考虑用typedef定义新的整数名。
      假设编写的程序需要用变量来存储产品数量,取值在0~50000.为此可以使用long int型变量,但是用户更愿意使用int型变量,因为算数运算int型比long int型运算速度更快;同时,int型变量可以占用较少的空间。
      我们可以定义自己的数量类型 ,而避免使用int类型声明数量变量;typedef int Quantity;并且使用这种类型来声明变量:Quantity q;
      打把程序转到小值整数的机器上时,需要改变Quantity的定义:
      typedef long int Quantity;
      可惜的是,这种变化无法解决所有问题,因为Quantity声明的变化可能会导致改变Quantity类型变量的使用方式。至少使用了Quantity类型的变量在scanf和printf函数的使用上需要改变,用转换说明%ld替换%d。

    C语言库自身使用typedef为那些可能依据C语言实现的不同的类型创建类型名;这些类型名的名字经常以_t结尾,比如ptrdiff_tsize_twchar_t

    展开全文
  • 然后IDE才能正确识别到boolean类型的变量,在对布尔类型进行存储时,实际上是以Int型进行存储。在赋值时,如果有以下程序段: #include <stdio.h> #include <stdbool.h> int main() { bool b = 6&...

        本博文主要探讨了bool类型在标准的C语言中的使用。

        在传统的C语言中,若要使用布尔变量,需要先声明

    #include <stdbool.h>

        然后IDE才能正确识别到boolean类型的变量,在对布尔类型进行存储时,实际上是以int型进行存储。在赋值时,如果有以下程序段:

    #include <stdio.h>
    #include <stdbool.h>
     
    int main()
    {
    	bool b = 6>4;
    	bool t = 2;
    	t = 2;
    	printf("b = %d\nt = %d\n",b,t);
    	return 0;
    }

        我们希望t被赋值为int型的2(其他非零非一常数也可)存储起来,但是编译器识别到bool类型的t被命令赋值为一个非零常数,会自动将t赋值为1;在输出打印过程中我们会发现t = 1,如下图所示。

     

    展开全文
  • C语言布尔类型(_Bool)

    千次阅读 2017-11-07 11:09:44
    也许很多人都和我一样,不知道现在的C语言已经有了...(这里我所说的“输入”,意思是:当在一个需要布尔值的地方,也就是其它类型转化为布尔类型时,比如 if 条件判断中的的条件;“输出”的意思是:程序的逻辑表达式
     也许很多人都和我一样,不知道现在的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};   
    /* 第一种方法 */
    #define TRUE 1
    #define FALSE 0
    
    
    /* 第二种方法 */ 
    enum bool{false, true}; 

    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. }  
    #include <stdio.h> 
    #include <stdlib.h>  
    
    int main(){
        _Bool a = 1;
        _Bool b = 2;    /* 使用非零值,b的值为1 */ 
        _Bool c = 0;
        _Bool d = -1;   /* 使用非零值,d的值为1 */ 
        
        printf("a==%d,  /n", a);
        printf("b==%d,  /n", b);
        printf("c==%d,  /n", c);
        printf("d==%d,  /n", d);
    
        printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
        
        system("pause");
        return EXIT_SUCCESS;
    }

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

    1. a==1,  
    2. b==1,  
    3. c==0,  
    4. d==1,  
    5. sizeof(_Bool) == 1  
    a==1,
    b==1,
    c==0,
    d==1,
    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 */  
    /* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
            This file is part of GCC.
     */
    
    #ifndef _STDBOOL_H
    #define _STDBOOL_H
    
    #ifndef __cplusplus
    
    #define bool	_Bool
    #define true	1
    #define false	0
    
    #else /* __cplusplus ,应用于C++里,这里不用处理它*/
    
    /* 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 */

             可见,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. }  
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <stdbool.h>
    
    /* 测试C99新添加的头文件 stdbool.h */
    
    int main(){
        bool m = true;
        bool n = false;
        printf("m==%d,  n==%d  /n", m, n);
        
        printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
    
        system("pause");
        return EXIT_SUCCESS;
    }

    执行结果为:

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

       

    本文链接:http://blog.csdn.net/daheiantian/archive/2011/02/05/6241893.aspx 

    展开全文
  • C语言中的布尔

    千次阅读 2019-09-29 16:21:11
    C语言布尔类型  在C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真。所以我们通常使用逻辑变量的做法: //定义一个int类型变量,当变量值为0时表示false,值为1时表示trueint flag...

      在C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真。所以我们通常使用逻辑变量的做法:

    复制代码
    //定义一个int类型变量,当变量值为0时表示false,值为1时表示true
    int flag;
    flag = 0;
    //......
    flag = 1;

    if( flag )
    {
    //......
    }
    复制代码

      

      但这种做法不直观,而且没有明确flag一定是布尔值。所以我们又借助C语言的宏定义:

    复制代码
    //宏定义布尔类型
    #define BOOL int
    #define TRUE 1
    #define FALSE 0

    //定义一个布尔变量
    BOOL flag = FALSE;
    复制代码

     

      这种方法虽然直观,但依然是换汤不换药,变量flag在编译器看来依然是int类型。

      新版本总会改进一些不好的地方,所以在最新的C语言标准(C99)解决了布尔类型的问题。C99提供了_Bool 型,所以布尔类型可以声明为 _Bool flag。

      _Bool依然仍是整数类型,但与一般整型不同的是,_Bool变量只能赋值为0或1,非0的值都会被存储为1。

      C99还提供了一个头文件 <stdbool.h> 定义了bool代表_Bool,true代表1,false代表0。只要导入 stdbool.h ,就能非常方便的操作布尔类型了。

    复制代码
    //导入 stdbool.h 来使用布尔类型
    #include <stdbool.h>
    #include <stdio.h>

    //计算n!,n的值在main中定义
    int main(void)
    {
    int n = 10; //计算叠乘数
    int sum = 1; //用来存放叠乘的结果
    bool flag = false; //叠乘标记

    int num = n; //循环次数
    while( !flag )
    {
    sum = sum * (num--);
    //当num=1时结束循环
    if( num == 1)
    {
    flag = true;
    }
    }
    printf ("%d的叠乘值为 %d \n", n, sum);
    return 0;
    }

    转载于:https://www.cnblogs.com/NULL-ROOT/p/10363862.html

    展开全文
  • C语言中的布尔类型 一、相关基础知识 首先booltruefalse为C++中的关键字,C语言中默认不支持这几个字符! 二、具体内容 在C89(ANSIC)标准中...
  • 相信很多初学C语言的朋友一定犯过这样的错误: double x = 1.0; double y = 0.9; if (x - y == 0.1) { printf("You can see me!\n"); } else { printf("oops!\n"); } 理论上,1.0 - 0.9 == 0.1是毫无疑问...
  • C语言中的布尔型变量

    万次阅读 2015-11-06 21:44:18
    但是,在C语言中是不存在布尔型这种数据类型的,所以大家不要直接去定义bool或者boolean这种类型的变量,C语言不支持这种数据类型。不过,C语言中也是有逻辑“真”与“假”的,在C语言中非0即为真,0即
  • C语言基本数据类型输入输出格式

    千次阅读 2020-10-06 17:23:01
    首先看一下C语言的基本数据类型C语言中,用int关键字来表示基本的整数类型。后3个关键字(long、short和unsigned)和C90新增的signed用于提供基本整数..._Bool类型表示布尔值(true或false),_complex和_Imagina
  • C语言不支持布尔型数据类型

    千次阅读 2013-10-03 21:26:54
    C语言里有没有布尔型这个数据类型 但我们由于使用习惯要这样使用的话,可以 ...ANSI C99标准规定C语言中有布尔类型(_Bool)。 为了方便,使用布尔类型可以加入头文件stdbool.h,该文件定义了bool=_B
  • 本篇博客我们主要讲解计算机中的布尔代数以及C语言的几个运算符。 1、布尔代数  我们知道二进制值是计算机编码、存储和操作信息的核心,随着计算机的发展,围绕数值0和1的研究已经演化出了丰富的数学知识体系。而...
  • 布尔矩阵—C语言

    千次阅读 2017-07-20 16:17:43
    1122: 布尔矩阵 时间限制: 1 Sec 内存限制: 32 MB 提交: 25 解决: 16 [提交][状态][讨论版] 题目描述 一个布尔矩阵有一种奇偶性,即该矩阵所有行和所有列的和都是偶数。下面这4×4的矩阵就具有奇偶性:  1 ...
  • C语言允许使用的类型,图中有*的是C99所增加的 使用bool类型,需要添加头文件#include<stdbool.h> 2、常用数据类型输出格式 类型 字节数及范围(以Visual C++为例) 输出格式 整型类型 int(基本...
  • 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型...
  • printf 和 cout 输出布尔

    千次阅读 2019-12-04 10:04:23
    printf("%d\n", true); // 1 printf("%d\n", false); // 0 bool test = true; cout << boolalpha << test << endl; // true
  • c语言中bool如何输出

    万次阅读 2011-10-14 12:04:39
    写java代码时间久了再写c的代码,发现思维很容易混乱,写c++的时候也容易混乱,今天用c语言输出bool型的值,居然用java的方法直接输出,结果当然不行,仔细想了一想,c中的bool型就是0和1,因此可以用%d输出,因此...
  • c语言常见基本数据类型长度

    千次阅读 2018-12-24 01:16:50
    #c语言基本数据类型有浮点型和整型 ##整型: 64位系统下各类型的 字节长度 基本整形 int 4 短整型 short int 2 长整型 long int 4 双长整型 long long (int) 8(c99增加的) 字符型 char 1 布尔型 bool 1...
  • C语言

    万次阅读 多人点赞 2019-03-28 11:39:01
    C语言数据类型 C语言运算符 C语言 函数 C语言 函数递归 C语言 数组 C语言 指针 指针的运算 数组作为函数参数 函数指针 返回值为指针的函数 void指针与NULL指针 动态分配内存 C/C++...
  • 函数参数中可以设置输出的参数,这里就不用写return了,并且在调用函数时,可以更新当前的数据规则,使得程序继续向前执行(冒泡排序就是这种特定,感兴趣可以观看: C语言使用技巧(十二):如何找到冒泡排序之后...
  • 浅谈基本数据类型,做的不好仅供参考! 数据类型分类大致分为三大板块:A、基本类型 B、枚举类型(enum),空类型(void) C、派生类型 A、基本类型: (1)、整型类型: 1、基本整型(int) 用整数的补码方式...
  • C语言到C++语言

    千次阅读 多人点赞 2019-08-05 08:32:45
    从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。 对于C和C++的关系,有很多种说法,新人很容易认为C++是C的升级版,C++比C要高级,C++高大上,C过时了,这种想法不一定对,...
  • C++/C 布尔类型

    2021-09-07 16:05:16
    C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真。例如: #include <stdio.h> int main(){ int a, b, flag; scanf("%d %d", &...输出:flag = 0 C语言并没有彻底从语法上支
  • 程序猿之---C语言细节26(C语言布尔类型、continue细节、sizeof举例、strlen举例)
  • 将一个整型变量的值赋给一个布尔型变量,再将这个布尔型变量的值赋给一个整型变量,得到的值是多少? 快来试试会发生什么! 输入格式 一个整型范围内的整数,即初始时整型变量的值。 输出格式 一个整数,经过上述...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,230
精华内容 8,892
关键字:

c语言输出布尔类型

c语言 订阅