- 1、本文档共34页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[其它]第10章位运算
主要内容 10.1 位运算符 10.2 位段 10.1 位运算符 10.1.1 位逻辑运算符 10.1.2 移位运算符 10.1.3 位运算应用实例 10.1 位运算符 位与 双目 位逻辑运算符类 | 位或 双目 ^ 位异或 双目 ~ 位取反 单目 左移 双目 移位运算符类 右移 双目 10.1 位运算符 运算优先级 逻辑运算符 位逻辑运算符优先级 关系运算符 | ^ 移位运算符 位逻辑运算符优先级 关系运算符 = 结合性 所有双目位运算符均具有左结合性 可以与赋值运算符组合成复合赋值运算符 = |= ^= = = 10.1.1 位逻辑运算符 位逻辑运算符的运算规则 10.1.1 位逻辑运算符 位逻辑运算符与逻辑运算符的区别 多位二进制的位逻辑运算按参与运算的操作数的存储形式逐位进行相应运算 x的值: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 y的值:0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 xy : 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 10.1.1 位逻辑运算符 操作数的符号位也参与运算,运算结果的符号位并不按算术规则确定。 #include stdio.h int main(void) { int a=0x800f, b; /* a 是一个负数 */ b=a0xc; /* 常数不清0xc是一个正数 */ printf(“%d\n”,b); return 0; } 程序的输出为正整数12 10.1.1 位逻辑运算符 使某个整型变量对应的存储单元清0 val=0; 使某个整型变量指定的某些二进位清0 用运算来查看某个二进位的值 if ((flagMASK)==MASK) 10.1.1 位逻辑运算符 截取(或析出)整型变量的指定的二进位,并使其他不相关的位清0。 例:假定变量的存储长度为16个二进位,并假定要析取出int型变量a(其值为OxF93)的第 4~7位(从右往左数,从0开始计数),且其余位清0。 0xF93 0 0 0 0 1 1 1 1 1 0 0 1 0 0 1 1 (变量a) 0360 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 (工作常数) a0360 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 10.1.1 位逻辑运算符 | 运算常用来将一个整型数据的指定的二进制位置1,而不管原来那个二进制位的状态如何。 例:假定int型变量a的值为 055555,如果要将该变量对应的存储单元的最高位置为1,只要计算 a |= 0x8000。 055555 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 (变量a) 0x8000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (常数) a |=0x8000 1 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 10.1.1 位逻辑运算符 当且仅当参加运算的两个操作数对应的二进位的状态不同时才将对应的二进位置为1。 例:假定a的内容为0x0F,则 0x0F 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 (变量a) 0x18 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 (常数) a^=0x18 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 程序设计中常用“按位加”运算以如下方法来实现两个变量内容的互换: x=x^y; y=y^x; x=x^y; 10.1.1 位逻辑运算符 对给定的操作数的各个二进位逐位求反。 对同一个操作数连续执行两次“位取反”操作其结果必定与原操作数相同。 x~077的含义: 取变量x的低6位以前的部分,并使结果的低6位全为0。 10.1.2 移位运算
文档评论(0)