C语言按位运算符 按位逻辑运算 移位运算 及其用法
目录
- 按位逻辑运算符
- 移位运算符
按位逻辑运算符
C语言提供了四种按位逻辑运算符
注:他们的操作数必须是整数。
1.按位取反(~)
~运算符把0变为1,把1变为0,如下例子所示:
~(0100 1001)=10110110,
这里需要注意的是
假设val的类型是unsigned char,已被赋值为2。在二进制中,0000 0010表示2。那么,~val的值是 1111 1101,即253。注意,该运算符不会改变val的值,但是可以这样用:val = ~val。 或者直接声明一个新的变量newval = ~val。
2.按位与(&)
&运算符通过逐位比较产生一个新值,如果把1看为真,0看为假,运算规则可以记为同真则真,一假则假。如下例子所示:
(1001 0011)&(0011 1101)=(0001 0001)
3.按位或(|)
|运算符通过逐位比较产生新值,如果把1看为真,0看为假,运算规则可以记为一真则真。如下例子所示:
(1001 0011)|(0011 1101)=(1011 1111)
4.按位异或(^)
^运算符通过逐位比较产生新值,如果两个运算对象中只有一个为1(但不是两个都为1),结果为1。如下例子所示:
(1001 0011)^(0011 1101)= (1010 1110)
c有一个按位异或和赋值运算结合的运算符:^=.
移位运算符
1.左移
表达式1 << 位数
将表达式1左移运算符右侧指定位数,移出左末端位的值丢,用0填充空出的位置。
2.右移
表达式1 >>位数
将表达式1右移运算符右侧指定位数,移出右末端的值丢掉,对于无符号类型,用0填充空出的位置;对于有符号类型,其结果取决于机器。空出的位置可用0填充,或者填充符号位原本的数字。如下例子所示:
(1000 1010)>>2 //表达式,有符号值
(0010 0010) //在某些系统中的值
(1000 1010)>>2 //表达式,有符号值
(1110 0010) //在另某一些系统中的值
下面是无符号值的例子:
(1000 1010)>>2
(0010 0010)
3.位移运算符用法
移位运算符针对2的幂提供快速的乘法和除法
number<<2 | number乘以2的n次幂 |
---|---|
number>>2 | 如果number 为非负,则用number除以2的n次幂 |
例题(选自c primer plus)
假设用一个unsigned long 类型的值表示颜色值,低阶位字节储存红色的强度,下一个字节储存绿的的强度,第三个字节储存蓝色的强度。随后你希望把每种颜色的强度分别储存在3个不同的unsigned char类型的变量中。那么,可以使用下面的语句:
#define BYTE_MASK 0xff
unsigned long color = 0x002a162f;
unsigned char bule, green, red;
red = color & BYTE_MASK 0xff;
green = (color >> 8) & BYTE_MASK 0xff;
blue = (color >> 16) & BYTE_MASK 0xff;
C语言按位运算符 按位逻辑运算 移位运算 及其用法相关推荐
- c语言中余数取整,C 逻辑运算, 移位运算 , 取整 , 取模(取余)
一. 按位运算 (快速操作数据的某个位) ^ 按位异或 ~ 按位取反 & 按位与 | 按位或 二. 逻辑运算 && 逻辑与 有一个值为 0 ,值为 0 || ...
- 【详解】位运算符:位逻辑运算符,位移运算符(<<左移,>>右移)
位运算符包括位逻辑运算符.位移运算符.最近做算法的时候经常用到,现在来总结下. 重点掌握的是 左移 << ,右移 >> . 1.位逻辑运算符 那么位逻辑运算符怎么计算的呢?先看 ...
- java位运算符和位运算表达式
java位运算符和位运算表达式 > 右移 x>>a X各比特位右移a位 << 左移 X< >> 不带符号的右移 x>>>a X各比特位 ...
- c语言提供了6个位运算,C语言基础丨运算符之位运算符(六)
对于更多紧凑的数据,C 程序能够用独立的位或多个组合在一块儿的位来存储信息.文件访问许可就是一个常见的应用案例.位运算符容许对一个字节或更大的数据单位中独立的位作处理:能够清除.设定,或者倒置任何位或 ...
- python位运算用途_Python 位运算符与位运算
总结: 位运算符 是 直接对整数在内存中的二进制位进行操作: Python运算符优先级: 以下表格列出了从最高到最低优先级的所有运算符: 运算符 描述 ** 指数 (最高优先级) ~ + - 按位翻转 ...
- 位运算符和位运算(与,或,异或等)
一."按位与"运算符(&) 1.运算规则 参加运算的两个数据,按二进位进行"与"运算,如果两个相应的二进位都为1,则该位的结果值为1,否则为0,即: 0 ...
- Java位运算符详解(移位、位与、或|、非~、异或^)
位运算符 位运算是对操作数以二进制为单位进行的操作和运算,运算结果为整数.位运算符包括:"&"."|"."~"."^&qu ...
- 菜鸟教程python位运算符_NumPy 位运算
NumPy 位运算 NumPy "bitwise_" 开头的函数是位运算函数. NumPy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 b ...
- python位运算符_Python位运算符
操作符1 名称:& 描述:按位与运算符 示例: #!/usr/bin/python # -*- coding: UTF-8 -*- # 定义变量,通过赋值运算符赋值"=" ...
最新文章
- springMVC4(9)属性编辑器剖析入参类型转换原理
- 一台机器上启动多个tomcat
- SpringBoot连接Mysql数据库遇到Unable to load authentication plugin ‘caching_sha2_password解决方案
- Maven 在 mac os M1芯片 上的安装
- JPA 2.1实体图–第1部分:命名实体图
- 游戏引擎开发和物理引擎_视频游戏开发的最佳游戏引擎
- 求n!最后一位非零数
- 运动:延伸你的美丽(图)
- 极简的js点击组图切换效果
- Windows下修改Git bash的HOME路径
- Gadgets 侧边栏小工具 跟踪调试方法
- 烤仔万花筒| Reach on Conflux 2021黑客松Demo Day
- sp485ee 芯片调试,RE DE 一直上拉故障
- 把图片放大清晰度不变的方法
- Java基础5多线程技术
- 前端基础入门之css less
- VC++获取系统信息/获取OS/获取MAC/获取本地IP/判断是否为网吧
- 零点起飞学java web_零点起飞学Java Web开发 (徐林林) 高清PDF_IT教程网
- 九州海上牧云记,电视剧节奏太慢?教你如何看全集
- 2018年诺贝尔经济学奖揭晓!两位美国教授获奖
热门文章
- TC2.0中怎样调用汇编程序
- IIS的Windows集成身份验证总结
- Cocoon概念性介绍
- LeetCode--80. 删除排序数组中的重复项Ⅱ(双指针,暴力)
- 入门机器学习(三)--课后作业解析-线性回归(Python实现)
- tar oracle home 权限不够,linux系统安装jdk
- android 不通过数据线打印日志_人人都可写代码-Android零基础编程-开发调试、APK编译04...
- 4017-二叉排序树的限定条件下的数据输出(C++,附思路及建立时的可能错误排查)
- header里面加值如何去掉引号_用ods tagsets.rtf 产生的表,怎么去掉页尾处的空白?...
- 2013汇总计算 广联达gcl_广联达图形算量GCL2013整体操作流程图文教程详解