- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十二章 位運算
第十二章 位运算
掌握位运算的概念和方法,学会使用位运算符;
学会通过位运算实现对某些位的操作;
了解位段的概念以及位段的定义和引用。
§12.1 相关概念
1. 位(bit):是指二进制中的位,它是计算机能 处理的最小单位。
2. 字节(byte):是计算机处理的基本单位。计算 机的内存是按字节进行分配的。一个字 节有八位二进制数组成。所以我们在C语 言中数据类型都是以字节为基本单元。
3. 补码:一个正数的补码是其本身;一个负数的 补码是其绝对值按位取反后加1。计算 机是以补码的形式存放数的。
例如:-7 的补码是 1111 1111 1111 1001
§12.2 位运算和位运算符
一、位运算的概念
位运算:以二进制位为单位的运算。
二、位运算符
“位运算”仅 限于整数(整型数和字符型)。
1. 位逻辑运算符
~ (按位求反)、 (按位与)、^ (按位异或) 、| (按位或)
运算规则:
~1=0 ~0=1
00=0 01=0 10=0 11=1
0^0=0 0^1=1 1^0=1 1^1=0
0 | 0=0 0 | 1=1 1 | 0=1 1 | 1=1
例如:main()
{ unsigned char a,b;
a=0x9d; b=0xa5;
printf(“~a: %x\n”, ~a);
printf(“ab: %x\n”,ab);
printf(“a | b: %x\n”,a | b);
printf(“a^b: %x\n”,a^b);
}
输出结果:
~a:
ab:
a | b:
a^b:
62
85
bd
38
位逻辑运算符的应用:
运算符的应用:①与0相,清0; ②与1相,取指定位 。
| 运算符的应用:与1相 | ,可对某些位定值为1。
^运算符的应用:与1相^,使特定位翻转;
2.位移位运算符
(按位左移)、(按位右移)
运算规则:
移位时,移出的位数全部丢失,移出的空位补入的数与左移还是右移有关。
左移——补入的数全都是0
例如:unsigned a=3;
a2的十进制值是:
a1的十进制值是:
12
1
3.位复合赋值运算符
由位运算符与赋值运算符组成。
=、|=、^=、=、=
例如:a=b相当于a=ab
a2相当于 a=a2
三、 位运算符的优先级
位运算符自身的优先级为(从高到低) :
~、(、)、 、 ^、|
位运算符与其他运算符相比较优先级为(从高到低):
~、算术运算符、(、)、关系运算符、、^、|、逻辑运算符、条件运算符、赋值(复合赋值)运算符、逗号运算符
例如:char a=9, b=020;
printf(“%o\n”,~ab1);
输出结果:40
§12.3 位段
位段:在一个结构体中可以以位为单位来指定 其成员所占内存长度,这种以位为单位 的成员称为位段(或位域)。
如:struct packed_data
{ unsigned a : 2;
unsigned b : 3;
unsigned c : 4;
int i;
}data;
位段的引用:
结构体变量名. 位段成员名
如:struct packed_data
{ unsigned a : 2;
unsigned b : 3;
unsigned c : 4;
int i;
}data;
位段的引用如下:
data.a=2;
data.b=7;
data.c=9;
注意:位段允许的最大值范围。
data.a=9; ╳
说明:
⑴位段成员的类型必须指定为unsigned int类型。
⑵允许在位段中定义无名字段,其含义为
文档评论(0)