C语言位运算,醍醐灌顶式教学
学习计算机的都了解,位运算其实以一种比较快速的运算,对于大型应用程序,可以节约很多运算时间。但是很多人都不了解,下面我来给大家大致讲解一下C语言中各种位运算符。(小声bb,不好的地方请多多包涵)
- 位运算
- 定义:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。(盗用了一下百度的定义)
位运算符
下面我用a, b两个整型变量进行举例
按位与
- 符号:&
- 用法:将a, b转换为二进制,末尾对其。如果对应位二进制都为1则该位1,否则为0。
例如:
int a = 5, b= 3;
//a = 101, b = 11;
// 101
// 11 a & b == 1
//-------------
// 001
按位或
- 符号:|
- 用法:将a, b转换为二进制,末尾对其。如果对应位二进制都为0则该位0,否则为1。
例如:
int a = 5, b= 3;
//a = 101, b = 11;
// 101
// 11 a | b == 7
//-------------
// 111
按位异或
- 符号:^
- 用法:将a, b转换为二进制,末尾对其。如果对应位二进制相同,则该位0,否则为1。
例如:
int a = 5, b= 3;
//a = 101, b = 11;
// 101
// 11 a ^ b == 6
//-------------
// 110
按位取反
- 符号:~
- 用法:~是单目运算符,将a, b转换为二进制,每一位上0改为1,1改为0。
例如:
int a = 5, b= 3;
//a = 101, b = 11;
// 101 011
// -------------
// *010 *000 *代表29个1 ,因为int类型一般占4个字节,一个字节8个二进制位,
// ·a == -6, b == -4
(至于这里为什么是 -6 -4,涉及一些原码补码反码的知识。大家记住正数按位取反,就加1再取反;负数按位取反,取反再减1)
左移
- 符号:<<
- 用法:一元运算符,将一个数转换为2进制后,全部左移N位,右补0。(a << N)
例如:
int a = 5;
a << 2;
//a = 101;
// 101
// 左移2位
// 10100
// a << 2 == 20
在其未超过其范围之前,a << N。相当于 a * (2^N)。
右移
- 符号:>>
- 用法:一元运算符,将一个数转换为2进制后,全部右移N位,移动到右端的低位被舍弃。(a >> N)
例如:
int a = 19;
a >> 2;
//a = 10011;
// 10011
// 右移2位
// 100
// a >> 2 == 4
在其未超过其范围之前,a >> N。相当于 a / (2^N)。(是C语言中的整型相除哦)
当然位运算用处很多,很多时候都会起到意想不到的作用,大家感兴趣可以多多了解呀。
看到这,点个赞再走吧。嘤嘤嘤!!!