您的位置:首页 > 其它

2.4.位运算实战演练1

2016-05-30 22:39 204 查看

2.4.位运算实战演练1

1.给一个整形数a,设置a的bit3,保证其他位不变

分析:

第一步:设置 a 的 bit3

a | = 1<<3


2.给一个整形数a,设置a的bit3-bit7,保证其他位不变

分析:

第一步:从bit3 -bit7共5位 ,先设置bit0-bit4

第二步:bit0-bit4左移到bit3-bit7

第三步:寄存器中原来的数和新构建的特定数位或

a | =0x1f<<3


3.给一个整形数a,清除a的bit15,保证其他位不变

分析:

第一步:清除bit15,则bit15是0,其他位是1

第二步:要构建的特定数1多0少,则使用取反 ~ , bit15是1,其他位是0,再取反

a & = ~(0x1<<15)


4.给一个整形数a,清除a的bit15-bit23,保证其他位不变

分析:

第一步:清除bit15-bit23,则bit15-bit23是0,其他位是1

第二步:要构建的特定数1多0少,则使用取反 ~ , bit15-bit23是1,其他位是0,再取反

第三步:寄存器中原来的数和新构建的数位与

a & =~(1ff<<15)


5.给定一个整形数a,取出a的bit3-bit8

分析:

第一步:除了bit3-bit8其他位清零,只保留需要的位上的数

第二步:将bit3-bit8右移3位

a & =(0x3f<<3);  //清除除了bit3-bit8的位
a >>=3;          //右移到最低位进行读取


6.用C语言给寄存器的bit7-bit17赋值937(其他位不能受影响)

注意:我们不知道寄存器中bit7*bit17原来的,就无法构建特定的二进制数

思路:

第一步:先将bit7-bit17清零

第二步:在写入937

a &= ~0x7ff<<7;  //清零
a |= 937<<7       //写入937


7.给bit7-bit17中的值加17(其他位不受影响)

思路:

第一步:先读出bit7-bit17中的值

第二步:增加17

第三步:寄存器bit7-bit17清零

第四步:写入第二步中算出的数

//第一步:把寄存器中的bit7-bit17取出来来放到tem中
tem = a & (7ff<<7)
//右移到最低位并读出原来的数
tem >>=3;

//第二步:增加17
tem +=17;

//第三步:寄存器bit7-bit17清零
a &=~(0x7ff<<7);

//第四步:写入
a |=tem<<7;


8.给寄存器bit7-bit17赋值937,同时给bit21-bit25赋值17

思路:第一步:先将bit7-bit17,bit21-bit25清零

第二步:得出937和17的对应的位

第三步:写入

//原来寄存器中的数
unsigned int a =0xffffffff;

//第一步:清零bit7-bit17,bit21-bit25
a &=~((0x7ff<<7)|(0x1f<<21))

//第二步:算出937和17以及其所对应的位,并写入
a |=(937<<7)|(17<<21)


9.思考:如何给寄存器bit7-bit17增加7,同时给bit21-bit25增加17?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  位运算