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

C语言中的位运算

2016-04-06 21:48 302 查看

位运算

左移、右移 << >>  左移右补0,右移左补0;
取反  ~
异或  ^   ----相同为0,不同为1
位与  &  ---------同1为1,同0为0,不同为0,(用于取位操作)
位或  ||   -------------同0,为0,,有1则1(置某位为1)

所有的位操作都是基于无符号类型的数据;[工作和笔试中没有负数,不需要按照补码或者是反码来求]
注意:
位操作也不是对变量的值直接操作啊,也就是说它是取a的值出来,算得上是a的一个备份,对备份进行操作;
a++是对值得直接操作,a=a+1;所以该变了变量的值;
对位的操作不改变原来的值;
#include <stdio.h>
unsigned int quwei(unsigned int u,unsigned int wei);
int main()
{
unsigned char a=7;//00000111
//左移和右移的操作; 左移右补零,右移左补零;
printf("%u\n",a<<2);//28--11100
printf("%u\n",a<<1);//14--1110
printf("%d\n",a>>2);//1-- 1

printf("%u\n",a>>7);//0 0
printf("%d\n",a<<7);//896 11 1000 0000

//取反操作;
printf("%u\n",(unsigned char)~a);//11111000 按位0--1 1--0;

//异或运算;
printf("%d\n",a^8);//15 按位异或运算,在同一位上,相同为,不同为;

//与运算;
printf("%d\n",a&7);//7 按位与运算,全为则为.不同的为;

//或运算;
printf("%d\n",a | 7);// 7 按位或运算,全为零则为,否则为;
printf("%d\n",quwei(2345,12));

return 0;
}

unsigned int quwei(unsigned int u,unsigned int wei )
{
return (u >> (wei-1)) & 1; //取某一位的值;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: