为什么不可以将布尔变量直接与TRUE、FALSE 或者1、0 进行比较

yuzhong1992 2016-11-23 11:09:16
一般情况下,我们都是使用如下方式将布尔变量与TRUE、FALSE来比较。
BOOL flag
if (!flag)
或者
if(flag)
其他的像如下的都是不允许的。
if (flag == TRUE)
if (flag == 1 )
if (flag == FALSE)
if (flag == 0)
像0和1比较这种能够想明白,因为VC里面TRUE是1,而VB里面TRUE是-1。但是TRUE和FALSE为什么就不行了呢?
...全文
1408 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-11-23
  • 打赏
  • 举报
回复
此外,为了方便,一般都直接用 if (flag) 判断是否为真,if (!flag) 判断是否为假
paschen 版主 2016-11-23
  • 打赏
  • 举报
回复
if (flag == FALSE) 可以这样写,但flag并非等于1为真,而是非0就为真,所以一般不应写成if (flag == TRUE) 这种写法
赵4老师 2016-11-23
  • 打赏
  • 举报
回复
    CMPXCHG 比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)
    CMP     比较.(两操作数作减法,仅修改标志位,不回送结果).
    CMPS    串比较.( CMPSB 比较字符. CMPSW 比较字. )
    JA/JNBE     不小于或不等于时转移.
    JAE/JNB     大于或等于转移.
    JB/JNAE     小于转移.
    JBE/JNA     小于或等于转移.
        以上四条,测试无符号整数运算的结果(标志C和Z).
    JG/JNLE     大于转移.
    JGE/JNL     大于或等于转移.
    JL/JNGE     小于转移.
    JLE/JNG     小于或等于转移.
        以上四条,测试带符号整数运算的结果(标志S,O和Z).
    JE/JZ       等于转移.
    JNE/JNZ     不等于时转移.
    JC          有进位时转移.
    JNC         无进位时转移.
    JNO         不溢出时转移.
    JNP/JPO     奇偶性为奇数时转移.
    JNS         符号位为 "0" 时转移.
    JO          溢出转移.
    JP/JPE      奇偶性为偶数时转移.
    JS          符号位为 "1" 时转移.
赵4老师 2016-11-23
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是TRUE、FALSE、整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
yuzhong1992 2016-11-23
  • 打赏
  • 举报
回复
一个BOOL变量的值应该是TRUE或FALSE,既然如此,直接和TRUE或者FALSE比较应该没有问题呀。
赵4老师 2016-11-23
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! 计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程! 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行! 不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!) VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 《The Intel 64 and IA-32 Architectures Software Developer's Manual》
penghuahuijuan 2016-11-23
  • 打赏
  • 举报
回复
不对吧!0为FALSE,非0为TURE; 这不能比较吧
赵4老师 2016-11-23
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察! VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
LyndonZheng 2016-11-23
  • 打赏
  • 举报
回复
TRUE,FALS ,1,0 都是整型数据,不是布尔数据,不建议做比较 你要强行比较也行,不会错 但是会出警告,正规的写法最好不这样
fefe82 2016-11-23
  • 打赏
  • 举报
回复
flag 如果是 3 呢 ?
fefe82 2016-11-23
  • 打赏
  • 举报
回复
TRUE 和 FALSE 应该不是布尔值。 true 和 false 才是。
小灸舞 2016-11-23
  • 打赏
  • 举报
回复
false/true是标准C++语言里新增的关键字,而FALSE/TRUE是通过#define,这是解决程序在C与C++中环境的差异

bool在C++里是占用1字节,而BOOL是int类型,int类型的大小是视具体环境而定的;所以来说:false/true只占用1个字节,而TRUE/FALSE视具体环境而言

http://blog.sina.com.cn/s/blog_9e2e84050101cl4o.html

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧