[其它]第10章位运算.pptVIP

  • 3
  • 0
  • 约6.18千字
  • 约 34页
  • 2018-02-20 发布于浙江
  • 举报
[其它]第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)

1亿VIP精品文档

相关文档