位运算符:按位取反(~)、位与()、位或(|)、位异或(^);左移运算符(<<)、右移运算符(>>)
位运算可对变量中的个别位进行操作,您可能对这样做的原因感到奇怪,这种能力有时确实是必须的,或者至少是有用的。
位运算符可以分为两大类:1、位逻辑运算符;2、移位运算符
1、位逻辑运算符:
位运算符用于整型数据,包括char。讲这些位运算符作为位运算的的原因是:他们对每位进行操作而不影响左右两位的值。注意:请不要将位逻辑运算符与常规的逻辑运算符(&&、||、!)混用,常规的逻辑运算符是对整个值进行操作。
按位取反(~):是一元运算符,是将每个0变为1,将每个1变为0,如下例子:
int a=7
a=0000 0111
int b=~a;//进行按位取反得到的是这个数的原码,在计算机中数值一律由补码进行存储
b=1111 1000 //原码
1000 0111//反码
1000 1000//补码=-8
对b的原码进行反码、补码操作后,可得到b=-8;
原码如何转换成反码、补码(这里对原码、反码、补码进行详细讲解)
运行结果:
位与(&):二元运算符,通过对两个操作数逐位进行比较产生一个新值;对于每个位,只有两个操作数的对应为都为1时结果才为1,否则为0。
int a=7;
a=0000 0111
int b=12;
b=0000 1100
int c=a&b;
c=0000 0100;//c=4
运行结果:
位或(|):二元运算符,通过对两个操作数逐一进行比较产生一个新值;对于每个位,只要有一个操作数的位是1,结果就是1,否者为0。
int a=7;
a=0000 0111
int b=12;
b=0000 1100
int c=a|b;
c=0000 1111;//c=15
运行结果:
位异或(^):二元运算符^,通过对两个逐位进行比较产生一个新值;如果操作数中的对应位有一个是1时那么结果为1,否则为0(两个0,两个1);
int a=7;
a=0000 0111
int b=12;
b=0000 1100
int c=a^b;
c=0000 1011;//c=11
运行结果:
2、移位运算符:
以为运算符将位向左或向右移动,同样我们仍将用二进制的形式来说明该机制的工作原理。
左移(<<):
左移运算符<<将其左侧操作数的值的每位向左移动,移动的位数由其右侧操作数决定。空出来的位用0填充,并且丢弃移出左侧操作数末端的位。
int a=1;
a=0000 0001
b=a<<1;//使a向左移一位
b=0000 0010//b=2
总结:左移一位相当于原来的乘2
运行结果:
右移(>>):
右移操作符>>将其右侧操作数的值的每位向右移动,移动的位数由其右侧操作数决定。对于unsigned类型,使用0填充左端空出的位。对于有符号类型,结果依赖于机器,空出的位可能用0填充,或者使用符号位(最左端)的副本填充。
int a=2;
a=0000 0010
int b=a>>1;//使a向左移一位
b=0000 0001//b=1;
总结:右移一位相当于原来的值除以2;
运行结果:
移位运算符的优点:能够提供快捷、高效对2的幂的乘法和除法;
number << n |
number乘以2的n次幂 |
number >> n |
如果number非负,则用number除以2的n次幂 |
位运算符:按位取反(~)、位与()、位或(|)、位异或(^);左移运算符(<<)、右移运算符(>>)相关推荐
- Python教程:异或运算符(^)、与运算符()、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)
1.异或的含义 异或运算与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:"两者的值不同."或"有且仅有一个为 ...
- 位与,位或,位异或运算符的理解
1.位与符号是& 真值表达式为: 1&1=1,1&0=0,0&1=0,0&0=0 记忆方式:&& 我们很容易理解..其实就是真真才为真,相当于& ...
- 左移和右移运算符的重载问题(里面的绝对盲点)在做了一遍,还是出错了
#include <iostream> //实现左移和右移的重载. using namespace std;class A { public:friend ostream operator ...
- 位运算总结(按位与,或,异或)
按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1= ...
- 位运算符:按位与(),按位或(|),按位异或(^),取反(~)左移()和右移()
数据在内存中是以二进制的形式存放的,计算机存储数据的最小单位是位(bit),一个二进制位可以表示两种状态(0和1),一个字节通常由8位二进制位组成.C语言支持按位运算,按位运算也就是对字节或者字中的实 ...
- 位运算(按位与 、按位或、按位异或、取反、左移右移)
位运算 与(&) 0&0=0 0&1=0 1&0=0 1&1=1 或(|) 0|0=0 0|1=1 1|0=1 1|1=1 异或(^) 0^0=0 0^1=1 ...
- 位运算(按位与、按位或|、按位异或^) 运算规则与实例
位运算(按位与.按位或.按位异或) 按位与运算符(&) 参加运算的两个数,按二进制位进行"与"运算. 运算规则:同为1,结果为1,否则为0,即 0 & 0= 0 , ...
- 位运算:按位与、按位或、按位异或、按位非(补码 反码)
原码 补码 反码 计算机中的符号数有三种表示方法:原码.补码.反码.这三种表示方法都由符号位和数值位两部分组成,符号位1表示负数,0表示正数. 二进制数在内存中是以补码的形式存放的.为了更好理解计算机 ...
- Java位运算(按位与、按位或、异或)
一.位运算 位即二进制位或bit位 所有运算到计算中底层中都会变成位运算,位运算可以提高程序的效率,而且我们在研究JDK或者某个框架的源码时,会发现很多地方都用到了位运算! 例如我们在对数组进行排序时 ...
最新文章
- mysql查看修改记录_(转)MySql中监视增删改查和查看日志记录
- Arch Linux PDF格式文件无法显示中文
- 通过浏览器navigator判断浏览器版本或者手机类型判断微信访问
- python基础知识整理-Python 重点知识整理(基于Python学习手册第四版)
- CTFshow php特性 web139
- 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)
- Android https通信问题
- 移动支付到底有多美?
- poi 获取删除线_Houdini 删除相机看不到的点背面的点或面
- 基于热传导方程的高温作业专用服装设计(一)
- pyecharts绘制K线
- 兰州大学第一届『飞马杯』程序设计竞赛
- table 表格合并
- VS2017卡在登录界面问题
- dhrystone测试前系统软件准备与计算
- 中国电信光猫路由模式端口映射问题记录
- 解压chm后由hhc生成html索引页面
- 焦虑,不知所措,努力应对,坦然,双非本硕求职算法的故事
- Leetcode 577
- 软件测试人员易遗漏的一些隐藏缺陷
热门文章
- w10 保护你的计算机,win10smartscreen筛选器怎么关闭-“windows已保护你的电脑”的关闭方法 - 河东软件园...
- 直播报名|美团技术沙龙:美团算法实践——搜索、广告、推荐专场
- 网络安全工程师要学习哪些编程语言?哪里学网络安全知识可靠?
- Linux有多重要?到底该如何学习Linux?
- 关于CMNET和CMWAP联网实践
- 传Snapchat母公司Snap拟于3月在纽交所IPO上市
- C#中服务器端以太网通讯(一对一)
- 离散数学——基本等价式、基本蕴含式
- 我的世界Bukkit服务器插件开发教程(十一)粒子、药水效果与音效
- 去除 csv 文件中的重复行