c/c++位操作简介--移位、位与、位或、异或
概述
C/C++里面位操作符表示为如下:左移位 << ,右移位 >>,位与 &,位或 | ,位异或 ^,按位求反~。
位操作符针对的是补码形式(可参见下面的例子,其实我们给出的字面值常量和以16进制输出均是补码形式),这点必须要清楚。
还有就是位操作符的优先级:按位求反 >移位 > 位与 > 位异或 > 位或 优先级,按位求反具有右即合性,其他均具有左结合性,这点在C++里面需要注意,因为输入输出经常用到移位操作符,注意加括号( std::cout<<(a&b) )。
位与 &,位或 | ,位异或 ^的结果中 某位的值只跟两个操作数中相应位的值相关,这三个位操作均各自符合 结合律和交换律。
移位操作
参见:http://www.cnblogs.com/tenghoo/archive/2008/06/01/1211663.html
c语言的移位操作采取补0还是补符号位依赖于具体的机器,在80x86中采用的是:对无符号数采用逻辑移位方式(即左移最低位补0,右移最高位补0)实现,对符号数的向左移位采用和无符号数相同的方法,对符号数的向右移位采用补符号位的方式。下面是代码实例:
#include <iostream>
#include <cstdlib>int main(int argc,char**argv){//for signed int a=0xff000005;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<std::endl;for(int i=1;i<=32;++i){int b=a<<i;std::cout<<"a<<"<<i<<"="<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;}std::cout<<"--------"<<std::endl;for(int i=1;i<=32;++i){int b=a>>i;std::cout<<"a>>"<<i<<"="<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;}//for unsignedunsigned int au=0xff000005;//这里字面值常量没被认为是符号数,但最好还是0xff000005ustd::cout<<au<<"("<<std::hex<<au<<")"<<std::dec<<std::endl;for(int i=1;i<=32;++i){unsigned int b=au<<i;std::cout<<"au<<"<<i<<"="<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;}return EXIT_SUCCESS;
}
部分运行结果截图如下,括号内为补码:
符号数左移
符号数右移
无符号数右移
位求反、位与、位或、异或
需要注意的是符号位也参与运算,代码如下:
#include <iostream>
#include <cstdlib>int main(int argc,char**argv){int a=-1;int b=~a;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" ~ "<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;a=-2;b=~a;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" ~ "<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;a=1;b=~a;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" ~ "<<b<<"("<<std::hex<<b<<")"<<std::dec<<std::endl;a=-1;b=1;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" & "<<b<<"("<<std::hex<<b<<") "<<(a&b)<<std::dec<<std::endl;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" | "<<b<<"("<<std::hex<<b<<") "<<(a|b)<<std::dec<<std::endl;std::cout<<a<<"("<<std::hex<<a<<")"<<std::dec<<" ^ "<<b<<"("<<std::hex<<b<<") "<<(a^b)<<std::dec<<std::endl;return EXIT_SUCCESS;
}
以上代码均在gcc下编译
c/c++位操作简介--移位、位与、位或、异或相关推荐
- 按位与和异或运算符(Python中两个不常用,却重要的运算符)
Python中两个不常用,却重要的运算符 按位与 和 异或 运算符 **&按位与运算符:**转化为二进制,每一位分别进行运算,每一位相同为1,不同为0 **^异或运算符:**0和任何数都是变成 ...
- python中的且和或怎么表示_python中逻辑与或(and、or)和按位与或异或(、|、^)区别...
按位与或(&.|.^):按照二进制进行逻辑运算 例如:数字换成二进制,各自位上的0/1进行逻辑运算,得到的结果转换为数字 3 & 2 =0111 & 0010 =0010 =2 ...
- 【STM32】位操作、按位与、按位或、按位异或、取反、左移、右移等基础 C 语言知识补充
文章目录 1 位操作 1.1 按位与 1.2 按位或 1.3 按位异或 1.4 取反 1.5 左移 1.6 右移 2 单片机中常用操作 2.1 不改变其他位时,对某几个位设定值 2.2 移位操作提高代 ...
- 位运算总结(按位与,或,异或)
按位与运算符(&) 参加运算的两个数据,按二进制位进行"与"运算. 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1= ...
- C语言中按位与/或/异或运算笔记
按位与(&)和,或(丨),异或(^)运算都是属于位运算符 是在二进制形式上进行的一个运算符 很简单的三种运算,但是有时候会很容易记反. 一.按位与运算 按位与运算口诀:同一则一. 1.只有当两 ...
- python 的按位与 或 异或 运算
符号 描述 运算规则 by MoreWindows & 与 两个位都为1时,结果才为1 (统计奇数) | 或 两个位都为0时,结果才为0 ...
- python:逻辑与或(and、or),按位与或异或(、|、^),逻辑短路
按位与或(&.|.^):按照二进制进行逻辑运算 例如:数字换成二进制,各自位上的0/1进行逻辑运算,得到的结果转换为数字 3 & 2 =0111 & 0010 =0010 =2 ...
- 位与,位或,位异或运算符的理解
1.位与符号是& 真值表达式为: 1&1=1,1&0=0,0&1=0,0&0=0 记忆方式:&& 我们很容易理解..其实就是真真才为真,相当于& ...
- 《1.4.ARM裸机第四部分-GPIO和LED》
转发自 朱有鹏老师 嵌入式linux-核心开发教程 课件 在此对朱老师表示感谢! 第一部分.章节目录 1.4.1.裸机实验体验之usb启动配合dnw工具下载 1.4.2.裸机实验体验之SD卡下载 1. ...
最新文章
- 华为p40鸿蒙系统价格有好高,鸿蒙系统版本华为P50新机的曝光,华为P40处境悲惨价格骤降...
- 【深度学习】NetAug(网络增强)—Dropout的反面
- 不能将参数转化为lparam_反渗透纯水机是将自来水直接转化为超纯水的装置
- tensorflow打印模型结构_社区分享 | 详解 TensorFlow 中 Placement 的最后一道防线 — Placer 算法...
- CSS3中:nth-child和:nth-of-type的区别深入理解。 关于:nth-child和:nth-of-type的区别之前一直没太注意,经深入理解才发现里面其实暗藏玄机...
- Spark数据倾斜解决方案(转)
- BugkuCTF-MISC题普通的二维码
- qimage加载bmp图片_9个最佳的优化动态gif图片大小的工具
- java计算器模拟程序_模拟计算器java程序
- hibernate笔记(三)
- MATLAB将.mat矩阵写成.tif图片
- 京东放大镜效果实现 + 原理分析
- M4A格式的ID3信息提取
- 【转】C++ std::tr1::shared_ptr使用
- Origin: 双Y轴 | 柱状图 | 折线图 | 垂线散点图的结合绘制
- python四大数据类型——python筑基系列
- 京东架构师讲解京东是如何优化列表页的
- 2022年终结——人生中最美好的一站
- 【新闻】微信出现大面积BUG!腾讯紧急回应!
- 《MFC如何添加子对话框》
热门文章
- Dashgo D1使用手册
- IT青年们如何突围?要接地气
- css filter blur 白边,解决css3毛玻璃效果(blur)有白边问题
- leetcode阶段总结——拓扑排序
- 非师范专业不能教高中吗 高中教师资格证怎么考
- 瓜子二手车后台研发实习生面经
- Subresource Integrity 介绍--SRI (Subresource Integrity) 的检查
- 走进Vue.js 1.0-姜威-专题视频课程
- 懒人的漫画下载工具[基本能用版]
- linux 网口对应网卡_Intel 700系列 电口万兆网卡 X710T2L评测