上QQ阅读APP看书,第一时间看更新
2.6 位运算实战演练2
2.6.1 用C语言将寄存器a的bit7~bit17中的值加17(其余位不受影响)
分析:第一步:先读出原来的bit7~bit17的值。第二步:在这个值的基础上加17。第三步:将bit7~bit17清零。第四步:将第二步算出来的值写回到bit7~bit17位。
tmp =(a &~(0x7ff<<7)); // 将bit7~ bit17外的其他位清零 tmp >>= 7; // 右移7位得到bit7~ bit17的值 tmp += 17; // 加17 a &= ~(0x7ff<<7); a |= tmp <<7;
2.6.2 用C语言给寄存器a的bit7~bit17赋值937,同时给bit21~bit25赋值17
分析:方法有两种,第一种是第一步bit7~bit17清零,第二步bit21~bit25清零。第二种是,将bit7~bit17和bit21~bit25的清零一步完成。
❶第一种方法如下所示。
// bit7~bit17赋值937 a &= ~(0x7ff<<7); // bit7~ bit17清零 a |= 937<<7; // bit21~bit25赋值17 a &= ~(0x1f<<21); // bit21~bit25清零 a |= 17<<21;
❷第二种方法如下所示。
// bit7~bit17和bit21~bit25全清零 a &= ~((0x7ff<<7) | (0x1f<<21)); // 937和17全部赋值 a |= ((937<<7) | (17<<21));