**C的位运算符**
1、二进制反码或按位取反:~
~(10011010) = (01100101)。
假设val是一个unsigned char,~val不改名原来val的值。
2、位与:&
二进制运算符&通过对两个操作数逐位进行比较产生一个新值。
(10010011)&(00111101)=(00010001)。
C中的一个组合的位与赋值运算符:&=。
3、位或:|
二进制运算符|通过对两个操作数逐位进行比较产生一个新值。
(10010011)|(00111101)=(10111111)。
C中的一个组合的位或赋值运算符:|=。
4、位异或:^
二进制运算符^对两个操作数逐位进行比较。对于每个位,如果操作数中对应位有一个为1,结果为1。
(100100011)^(00111101)=(10101110)。
C中有一个组合的位异或赋值运算符:^=。
5、掩码:“位与”运算符通常跟掩码一起使用。掩码是某些位设为开(1)而某些位设置为关(0)的位组合。
flags = flags & MASK。
6、打开位。如,对于flags,想要打开它的第二位,可以使用flags = flags | (1<<2).
7、关闭位。如,对于flags,想要关闭它的第二位,可以使用flags = flags & (~(1<<2))。
8、转置位。转置一个位表示如果该位打开,则关闭该位;如果该位关闭,则打开该位。
如,对于flags,想要转置它的第二位,可以使用flags = flags ^ (1<<2)。
9、移位运算符。左移:<<。右移:>>。左移运算符<<将其左侧操作数的值的每位向左移动,移动的位数由其右侧操作数指定。空出的位用0填充,并且丢弃移出左侧操作数末端的位。右侧位运算符>>将其左侧操作数的值的每位向右移动,移动的位数由其右侧操作数指定。丢弃移出左侧操作数右端的位。
10、移位运算符:移位运算符能够提供快捷、高效的对2的幂的乘法和除法。
number << n : number乘以2的n次幂。
number >> n : 如果number非负,则用number除以2的n次幂。
- 前言
- (四)回调函数
- (一)while(1)死循环与for(;;)死循环的区别
- (二)static关键字
- (三)函数
- (四)可变参数函数
- (五)setjmp和longjmp
- (六)指针
- (七)回调函数
- (八)字符串
- (九)动态内存分配
- (十)结构体
- (十一)深入理解指针
- (十二)命令行参数
- (十三)printf、fprintf、sprintf和snprintf函数
- (十四)const关键字详解
- (十五)字符串输入函数fgets、gets和scanf
- (十六)字符串输出函数puts、fputs和printf
- (十七)字符/字符串输出函数fputc、fputs、putc、putchar和puts
- (十八)字符/字符串输入函数fgetc、fgets、getc、getchar和gets
- (十九)restrict关键词
- (二十)scanf函数详解
- (二一)内联函数
- (二二)位操作
- (二三)errno变量
- (二四)内存分配