C语言入门之位运算
程序员文章站
2022-04-03 22:35:47
...
慕课网课程笔记。
课程连接:https://www.imooc.com/video/8218
位运算的运算速度比乘法快很多。
& 按位与
参与运算的两个数,按照对应的二进制数,逐位进行逻辑与运算,
必须是整型或字符型。必须以补码的方式出现。
int a = 4; // 00000000 00000000 00000000 00000100
int b = 7; // 00000000 00000000 00000000 00000111
int c = a&b; // 00000000 00000000 00000000 00000100
/*
第一个应用,迅速清零,数的对应两位,只有都为1时,得到的才为1,否则为零。所以任意一个数,与0做按位与运算,得到的一定为零。
第二个应用,保留一个数的指定位,,让该数与一个数的低位全为1的数做按位与运算,就得到了该数的低位。
第三个应用,判断奇偶性,a&1,得到的结果为1,是奇数,结果为零,是偶数;
*/
int a = 9; //00000000 00000000 00000000 00001001
int b = 5; //00000000 00000000 00000000 00000101
只要有1就为1,全零才为零。
int c = a|b;
/*
应用,设置一个数的指定位,只需要让另一个数的该位置为1,即可。
*/
int a = 9; //0000 1001
int b = 5; //0000 0101
相同为零,不同为一。
int c = a^b; //0000 1100
/*
定位反转,所有的零变成一,一变成零。让他按位异或 一个位全为1 的数。
数值交换,实现两个数的交换,
a = a^b;
b = b^a;
a = a^b;
*/
按位取反,单目运算符,
把一换成零,把零换成一。
左移运算符
int a = 3; //00000000 00000000 00000000 00000011
a = a<<4; //00000000 00000000 00000000 00110000
高位丢弃,低位零补齐,
左移n位,将数乘以2的n次方。
int 是有符号位的数,左移可能会产生数的溢出。
应用:运算速度比乘法快,可以用该运算符提高速度。
右移运算符
右移n位。除以2的n次方。
有符号数,根据符号位,决定左边补零还是补一,符号为零补零,符号位为一,根据操作系统不同而不同。
上一篇: 07:不与最大数相同的数字之和
下一篇: 13:整数去重