镜花水月(一)

真真假假的布尔类型

C/C++语言中,有两种 bool(布尔)类型的表示方式:
第一种:直接使用 bool 类型

    bool 类型, 只有两个值:true、false
    例: bool a = true;

第二种:使用 0 和非 0 的任何值(C 语言风格)

    0: 表示假
    非 0: 表示真

    
回想一下我们之前字符串的比较所讲
(C++类型):
std::string a = “123”;
std::string b = “1230”;
a < b (为真)
最后a与b比较的结果就是布尔值:true或false
通常比较运算的结果:都是逻辑值

那么如果是C语言的字符串我们怎么比较呢? 稍微有些不同:
我们需要增加头文件,并使用其中的函数:

#include <string.h> 
int strcmp( const char *str1, const char *str2 );

//例如: 
int ret; 
ret = strcmp(str1, str2);

/*
	返回值:
	str1 < str2 时, 返回值< 0(有些编译器返回 -1)
	str1 > str2 时, 返回值> 0(有些编译器返回 1)
	str1 等于 str2 时, 返回值为 0
*/

    

“与或非”逻辑运算

与 C 语言完全相同。

逻辑与 &&
在这里插入图片描述
都为真,逻辑与才是真
只要有一个为假,逻辑与就是假

相当于我们日常生活中说的 “并且”

特别注意:
    条件 1 && 条件 2
    当条件 1 为真时,才去判断条件 2
    当条件 1 为假时,就不再判断条件 2

    
逻辑或 ||
在这里插入图片描述
只要有一个是真, 结果就是真
都为假时,结果才是假

相当于我们日常生活中说的 “或者”

特别注意:
    条件 1 || 条件 2
    当条件 1 为真时,就不再判断条件 2
    当条件 1 为假时,才判断条件 2

    
逻辑非 !

是”单目运算符”, 即:只有一个操作数
在这里插入图片描述
相当于“不”

特别注意:
逻辑非,只对一个条件进行运算!
是一种“单目运算符”

    

操作硬件的位运算

各位少侠,学过了逻辑运算,我们趁热打铁赶紧学习一下硬件的位运算操作。

什么是位?
内存的基本单元是字节, 一个字节有 8 位
    
位与&

  0 & 0  结果为 0
  0 & 1  结果为 0
  1 & 0  结果为 0
  1 & 1  结果为 1

思想和 与&&逻辑相同,只不过我们计算的是0和1,同为1结果才是1

例:3&4
  3在计算机中以二进制储存是00000011
  4在计算机中以二进制储存是00000100
  根据我们的运算思想最终结果是00000000
    

位或|
  0 | 0  结果为 0
  0 | 1  结果为 1
  1 | 0  结果为 1
  1 | 1  结果为 1

思想和 或||逻辑相同,只不过我们计算的是0和1,同为0结果才是0

例:3|4
  3在计算机中以二进制储存是00000011
  4在计算机中以二进制储存是00000100
  根据我们的运算思想最终结果是00000111
    

位非 ~
  ~ 1 结果为 0
  ~ 0 结果为 1
思想和 !非逻辑相同,就是取反

例:~3
  3在计算机中以二进制储存是00000011
  根据我们的运算思想最终结果是11111100
    

异或 ^
  0 ^ 0  结果为 0
  1 ^ 1  结果为 0
  0 ^ 1  结果为 1
  1 ^ 0  结果为 1
运算思想重在一个“异”,不相同为 1,相同为0
    

<< 左移
右边的位用 0 来填充, 移动超出左边边界的位则直接抛弃。(别忘了一个字节最高8位)

向左移动 n 个位置,就等同于乘以 2 的 n 次方

例:8 << 3(8左移三位)
  8在计算机中以二进制储存是00001000
   根 据我们的思想最终结果是01000000    //8 * 2 * 2 * 2
    

>> 右移
如果左操作数是无符号类型,则左边多出来的位用 0 来填充。

如果左操作数是有符号类型,则左边多出来的位用 符号位(最高位) 来填充。

向左移动 n 个位置,就等同于除以 2 的 n 次方

例:8 >> 3(8右移三位)
  8在计算机中以二进制储存是00001000
   根 据我们的思想最终结果是00000001    // 8 / 2 /2 / 2
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值