您的位置:首页 > 编程语言 > C语言/C++

c 语言位操作

2016-07-20 17:35 337 查看
位操作符:

1、位与 &

2、位或 |

3、位异或 ^

4、位取反 ~

5、左移位 << 右移位 >>



(3)从真值表可以看出:位或操作的特点是,只有0和0位或的结果是0,其余全是1.

(4)位或和逻辑或的区别:位或时两个操作数是按照二进制位彼此对应为相或的,逻辑或是两个操作数作为整体来相或的。



#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int a = 45;
int b;
int c;
b = ~a;
c = !a;
printf("b=%d\n",b);
printf("c=%d\n",c);
system("pause");
return 0;
}






#include<stdio.h>
#include<stdlib.h>
int main(void)
{
unsigned int a = 45;                             // a:101101
unsigned int b = 23;                             // b:010111
unsigned int c;                                  // c:111010
c = a^b;
printf("c=%d\n",c);
system("pause");
return 0;
}








注意最后一条,有符号数,右移位左侧补符号位







4.2.2.5、举例:

(1)我们需要一个bit3~bit7为1(隐含意思就是其他位为0)的二进制数我们可以这样做:(0x1f << 3).

(2)更难的要求,获取bit3~bit7为1,同时bit23~bit25为1,其余位为0

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
unsigned int a ;
a =( (0x1f << 3)|(0x7 << 23));
printf("a=0x%x\n",a);
system("pause");
return 0;
}




(3)获取bit4~bit10为0,其余为1.

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
unsigned int a ;
a = ~(0x7f<<4);
printf("a=0x%x\n",a);
system("pause");
return 0;
}




4.2.2.6、位运算实战演练:



(1)a | = (1 << 3);

(2)a |= (0x1f << 3);

(3)a &= (~(1 << 15));

(4)a &= (~(0x1ff<< 15));

(5)


(6)

要明白置1和赋值都是用位或。赋值之前要把原来的数清除。



(7)





(8)


//备注:第七题和第八题的0x3ff是误写,真实的是0x7ff.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 位操作