C语言基础之位运算

来源:互联网 发布:亨通大数据产业园 编辑:程序博客网 时间:2024/06/05 01:09

取反 ~

~(1)2=(0)2

~(110)2=(001)2

 取反可以用来做文件加密操作

解密只需要将文件二进制取反就可以了


与   &


1&0=0 0&0=0

与运算可以用来做清零操作

将n的后多少位清零

n=n>>5<<5;

将n的后



判断一个整数转化为二进制有多少个1

int n=0,a=100;for(;a;a=a&(a-1))        n++;

这段代码可以判断100转化为2进制有多少个1

可以自行推演运算过程


或 |

可以用来将多少位置为1


如       a|=(1<<n)-1;

将后n-1位置为1



异或  ^

1^1=0 0^0=0 1^0=1 0^1=1

可以用来加密

对某个数进行异或加密

再次异或解密


1110101010011

0110101000110 n

------------------------

1000000010101

0110101000110 n

----------------------

1110101010011

和1异或发生反转

和0异或不改变


可以实现两个数的交换


a=a^b    改变a不改变b

b=a^b   将b置为原来的a

a=a^b   将a置为原来的b

这种交换方式一般用在面试和嵌入式的节约内存


在进行特殊的数据操作,如果与操作的位数有关,可以通过取反运算来做操作

对short末尾清零


ch = ch & ~1;

ch = ch &~((1<<5)-1)


可以用来对结构体的快速查找,因为内存是以4的倍数存储数据结构的,所以用异或 3,7来进行数据查找







原创粉丝点击