逻辑运算符与算术运算符的区分
发布日期:2022-02-10 08:11:14
浏览次数:32
分类:技术文章
本文共 1486 字,大约阅读时间需要 4 分钟。
!与~,&与&&,|与||,>>、<<以及^
- !与~
- !逻辑运算符,只有 0 与 非0 两种可能。
- ~ 位运算符,在数值的二进制形式上按位取反:0 变成 1 ,1 变成 0 。
int i = 2;int j = ~i;int k = !i;cout << j <<" "<< k;
*最后结果* -3 0 *分析原因* k = 0:i=2是非0,逻辑取反自然为0。 j = -3: 2在32位机中表示为二进制补码:00...0010(共32位) 按位取反:11...1101(共32位) 有符号整型数的解读:符号位为1,是负数。 将补码转为原码,减1再取反。*(负数原码转为补码的逆操作)* 结果为:00..0011(共31位) 转化为十进制数结果是 3,加上符号,最终结果为 -3 。
- &&、|| 与 &、|
- && 是逻辑与,可以理解为 and 的意思。返回结果只有 0(False) 与 1(True)。
- || 就是逻辑或了,可以理解为 or 的意思。返回结果与上相同。(逻辑运算符返回结果只有 False 与 True,可以联系布尔类型理解)
- 以上两个运算符两端为表达式。
- & 是位与运算符,在数值的二进制表示上每一位做与运算,1 & 1 为 1 ,其他情况都为 0 。
- | 就是位或符,对应就是做或运算了,0 | 0 为 0 ,其他情况为 1。
- 这两个运算符两端是操作数。
// && 与 ||int a = 1;int b = 2;int yu = a & b;int hu = a | b;cout<< yu <<" "<< hu << endl ;cout<< ((a == b) && (a != b)) <<
*最后结果* 0 3 0 1*分析原因* a = 1 ,也就是“01”; b = 2 ,也就是“10”。 a & b 就是 01 & 10 = 00,所以结果为 0 。 a | b 就是 01 | 10 = 11,所以结果为 3 。 a == b 为False,a != b 为 True。所以相与为 0 ,相或为 1 。
- ^
- 异或位运算符,相同为 0 ,不同为 1 。
int a = 2; int b = 4; int yh = a ^ b; cout << yh ;
*最后结果* 7*分析结果* a = 2 也就是 010 。 b = 4 也就是 100 。 异或结果 110 。
- << 与 >>
- 算术移位主要是用来进行有符号数的倍增和减半。
- "<<"算术左移:按二进制形式把所有的数字向左移动对应的位数,移出的高位舍弃,低位的空位补0。
- “>>” 算术右移:按二进制形式把所有的数字向右移动对应的位数,移出的低位舍弃,高位的空位补符号位。 “ 0 ”为正,“ 1 ”为负。
- 格式都是:待移位的数 运算符 移位的次数
int i = 7;int j = i << 2;int k = i >> 2;cout << j << " " << k ;
*最后结果* 28 1*分析结果*7的二进制形式为: 00...00111;(32位机为例)左移 2 位:00..0011100 转化为十进制为 28 。相当于乘以 2 的平方。右移 2 位:0000...00001 转化为十进制为 1 。相当于除以 2 的平方,得到整型结果。
- 逻辑移位一般是用于无符号数的倍增和递减。逻辑移位与算术移位的移动方式是一样的,不同的是逻辑移位无论左移还是右移,空位都补 0 。
转载地址:https://blog.csdn.net/qq_45717064/article/details/105505633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月17日 14时33分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hive函数大全
2021-06-30
大数据系列的默认端口(hbase,hadoop,hived等)
2021-06-30
Hive 创建表的三种方式
2021-06-30
Java 发起http GET POST请求实例
2021-06-30
Java 正则表达式 SQL匹配
2021-06-30
Java word 内容读取
2021-06-30
HBase Shell 常用命令
2021-06-30
es-head 删除INDEX 创建mapping
2021-06-30
Base64 + 变为 空格 问题分析
2019-04-27
linux几种常见的文件内容查找和替换命令
2019-04-27
HTML5 自由画布
2019-04-27
Spring Data JPA 写SQL语句也可以如此简单
2019-04-27
Spring data JPA方法命名规则
2019-04-27
Webstorm React Nodejs 整合
2019-04-27
Java日志框架-logback的介绍及配置使用方法(纯Java工程)
2019-04-27
Swagger2 使用说明
2019-04-27
Java 反射 set get
2019-04-27
JPA 多条件、多表查询
2019-04-27