&

&&

(与)“&”(都为1时,结果是1,否则是0)

按位与,将两个二进制的数逐位相与,结果是相与之后的结果

如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

例如:9&5可写算式如下:(9的二进制补码)&(5的二进制补码) 9&5=1

00001001&00000101=00000001   位数不对称可补码;

254&1=254

11111110&00000001=11111110

“&&”逻辑与

判断两个表达式的真假性,只有两个表达式同时为真才为真,有一个为假则为假

a=1;b=0; a&&b

a&&b a和b都为真时  式子才返回true,否则就返回false

|

||

(或)“|”  (有1时,结果是1,都是0时,结果为0)

参加运算的两个对象,按二进制位进行“或”运算

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000  0111   因此,3|5的值得7。

“||”

a||b,只有在前一个条件a为假,才会去判断条件b ;若条件a为真,则条件b不会执行

a||b,a或者b有一个为真时,式子就返回true,都为就假才返回false。

<<

(左移)左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

格式:需要移位的数字 << 移位的次数

例如:3<<2; 3转换为二进制是0011,所有数字左移2个位置,空位补0,得到1100,即十进制数12。

51hei.png (44.06 KB, 下载次数: 17)

2020-3-31 14:15 上传

>>

(右移)右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,某些机器将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。

按二进制把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位(正数补零,负数补1)。

格式:需要移位的数字 >> 移位的次数

例如:11 >> 2    1011>>2=0010;

11的二进制为1011,所有数向右移2个位置,因为11是正数,所以高位补0,得0010,是十进制的2。

注意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。

提醒:

移位运算符是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<>(带符号右移)和>>>(无符号右移)。

数学意义:

1、在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

2、右移一位相当于除2,右移n位相当于除以2的n次方。

^参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为 0。

“异或运算”的特殊作用:

(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

~

!“~”按位取反(二进制数)

位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。对于整形变量,对每一个二进制位进行取反,0变1,1变0。

“!”:是逻辑运算符,用于从左到右求表达式的真值。

C语言的32个关键字可以分为以下4类:

1 、数据类型关键字(12个):

(1) char :声明字符型变量或函数

(2) double :声明双精度变量或函数

(3) enum :声明枚举类型

(4) float:声明浮点型变量或函数

(5) int: 声明整型变量或函数

(6) long :声明长整型变量或函数

(7) short :声明短整型变量或函数

(8) signed:声明有符号类型变量或函数

(9) struct:声明结构体变量或函数

(10) union:声明共用体(联合)数据类型

(11) unsigned:声明无符号类型变量或函数

(12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)

2、控制语句关键字(12个):

A循环语句

(1) for:一种循环语句

(2) do :循环语句的循环体

(3) while :循环语句的循环条件

(4) break:跳出当前循环

(5) continue:结束当前循环,开始下一轮循环

B条件语句

(1)if: 条件语句

(2)else :条件语句否定分支(与if 连用)

(3)goto:无条件跳转语句

C开关语句

(1)switch :用于开关语句

(2)case:开关语句分支

(3)default:开关语句中的“其他”分支

D返回语句

return :子程序返回语句(可以带参数,也可不带参数)

3 、存储类型关键字(4个):

(1)auto :声明自动变量 一般不使用

(2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)

(3)register:声明寄存器变量

(4)static :声明静态变量

4 、其它关键字(4个):

(1)const :声明只读变量

(2)sizeof:计算数据类型长度

(3)typedef:用以给数据类型取别名

(4)volatile:说明变量在程序执行中可被隐含地改变

二、用途

按位与的用途

1.清零

若想对一个存储单元清零,即使其全部二进制位为0,只要对这个存储单元当前的值取反(也就是原来的数中为1变为0,0变为1),然后使二者进行&运算,即可达到清零目的。

比如a=23,b=~a:

a:00010111

b:11101000

a&b:00000000

2.取一个数中某些指定位

比如a=23,我想取a的二进制的后面4位数,那么可以找一个后4位是1其余位是0的数b,即b=0x0f(十六进制,转换为二进制为00001111),a&b就得到了a的后四位。

a:00010111

b:00001111

a&b:00000111

3.保留指定位

比如a=23(用8bit表示),我想保留其二进制的第4和第6位(最左边为第1位),其余位置0。那么可以找一个第4和第6位是1其余位是0的数b与a进行按位与运算

a:00010111

b:00010100

a&b:00010100

按位或的用途

常用来对一个数的某些位置1,其余位不变。比如a=23,我想将其第2和第3位置为1,可以找一个第2、3位是1其余位是0的数与a进行按位或运算。

a:00010111

b:01100000

a|b:01110111

三、项目实例

在实际项目中,很多时候&和|都是和>>、<

设备端现在收到另外一台设备传过来的日期数据00010100 00010011 0000011000011101(为了阅读方便我将每个byte之间用空格分开)。那么我要如何解析这个数据来得到实际日期呢?

/*

*第一步,获取日期。

*日期是最后一个byte,也就是最后8位,用一个后8位是1其余位是0的数(11111111,十六进制表示是0xff)与数据进行按位与计算即可

*/

date = 00010100 00010011 00000110 00011101;

day = date & 0xff;(计算结果是00011101,十进制表示是29,也就是日期是29)。

/*

*第二步,获取月份。

*月份是倒数第2个byte,此时需要先将最后一个byte砍掉(也就是右移8位),然后再和0xff进行按位与运算

*下面代码可以简写成date=date>>8&0xff;

*/

date = date>>8; (计算结果是00010100 00010011 00000110)

month = date & 0xff;(计算结果是00000110,十进制表示是6,也就是月份是6月)。

/*

*第三步,获取年份低位。

*先将最后一个byte砍掉(也就是右移8位),然后再和0xff进行按位与运算

*下面代码可以简写成date=date>>8&0xff;

*/

date = date>>8; (计算结果是00010100 00010011)

year_low = date & 0xff;(计算结果是00010011,十进制表示是19)。

/*

*第四步,获取年份高位。

*先将最后一个byte砍掉(也就是右移8位),然后再和0xff进行按位与运算

*下面代码可以简写成date=date>>8&0xff;

*/

date = date>>8; (计算结果是00010100)

year_heigh = date & 0xff;(计算结果是00010011,十进制表示是20)。

最后将4个数拼起来就得到日期为2019年6月29日。

完整的Word格式文档51黑下载地址:

运算符的含义.docx

(98.53 KB, 下载次数: 25)

2020-3-31 13:26 上传

点击文件名下载附件

下载积分: 黑币 -5

最新文章

  1. vmware 打开主页 打开所有库中的虚拟机
  2. 接口转发和重定向区别(三)
  3. Java将一段逗号分割的字符串转换成一个数组
  4. Ogre 学习笔记 (二) 环境:阴影 、雾效、灯光
  5. 和 VMware、深信服、天翼云、招商云专家一起聊聊云原生边缘计算
  6. 【NLP】Prompt-Tuning这么好用?
  7. 计算机专业颈椎有问题,出现这4个表现,你的颈椎病已经很严重了!上班族尤需警惕_39健康网...
  8. WebSocket笔记(一) 初步认识
  9. 报道称奈雪的茶通过港交所聆讯 回应:以公司经监管机构批准的公告为准
  10. sqlite迁移mysql(导入导出数据)
  11. 多易教育大数据课程学费调整通知
  12. Excel 内的 VBS 脚本编程锦策
  13. 安卓微信本地数据库解密与删除聊天记录恢复 EnMicroMsg.db FTS5IndexMicroMsg_encrypt.db
  14. 使用Aspose在C#中将PLT转换为PDF或JPEG图像
  15. 关于画法几何和机械制图有感
  16. java iplimage 头文件_在javacv中将IplImage转换为Mat
  17. 【单片机仿真】(七)寻址方式 — 位寻址
  18. java调用jacob_使用Java中的JACOB运行个人宏
  19. 惠普p1106打印机安装步骤_hp1106打印机安装驱动下载
  20. 打通前后端全栈开发node+vue+mongodb进阶

热门文章

  1. 免堆期由谁申请_谈谈离婚冷静期
  2. [洪流学堂]Hololens开发入门篇2之Hello World
  3. python装饰器代码简洁_Python基础知识之装饰器(示例代码)
  4. 使用Directory.EnumerateFiles进行批处理
  5. 具有数据库依赖性的.NET Core应用程序的集成测试
  6. 深度操作系统 Deepin 20 BETA 发布
  7. MFC关闭对话框可以不析构吗_Win10关闭Defender和防火墙
  8. python 文件和目录基本操作_Python常用的文件及文件路径、目录操作方法汇总介绍...
  9. 太阳能电池板正负极图_太阳能LED路灯故障原因有哪些?
  10. html5画安卓机器人,HTML5用户笔画形状检测机器人