(相关资料图)
前言
在上一篇文章中,我们介绍了~
运算符的高级用法,本篇文章,我们将介绍<<
运算符的一些高级用法。
一、人物简介
第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。二、计算2的整数次幂
代码示例#include < stdio.h >int main() { int x = 1; printf("请输入2的次方数:"); scanf("%d",&x); int y = 1 < < x; printf("n2的%d次方 = %dn",x,y); return 0;}
运行结果三、将一个字节序列合并为一个整数
例如,将4个字节组成的字节序列b合并为一个整数代码示例#include < stdio.h >int main() { unsigned char b[4] = {0x12, 0x34, 0x56, 0x78}; unsigned int x = ((unsigned int)b[0] < < 24) | ((unsigned int)b[1] < < 16) |((unsigned int)b[2] < < 8) | ((unsigned int)b[3]); printf("合并后的整数 = 0x%08xn", x); return 0;}
运行结果❝下面介绍的两种用法,会用到
&``|``^
的知识
如果有不清楚的,可以查看之前的文章:位运算符的基础用法
四、标记码
1、标记位置1
例如,将0xF8的第2位(从第0位开始数,由低位到高位) 置1代码示例#include < stdio.h >int main() { int x = 0xF8; x |= 1< <2; printf("x = 0x%0xn",x); return 0;}
运行结果2、标记位置0
例如,将0xF8的第3位(从第0位开始数,由低位到高位) 置0代码示例#include < stdio.h >int main() { int x = 0xF8; x &= (~(1< <3)); printf("x = 0x%0xn",x); return 0;}
运行结果3、标记位取反
例如,将0xF8的第3位和第2位(从第0位开始数,由低位到高位) 取反代码示例#include < stdio.h >int main() { int x = 0xF8; x ^= (3< <2); // 3的二进制为0b11,左移2位刚好对应第2和第3位 printf("x = 0x%0xn",x); return 0;}
运行结果五、掩码
1、末尾连续N位都置1
例如,将0xF8的低3位都置1代码示例#include < stdio.h >int main() { int x = 0xF8; // Ob1111 1000 x |= ((1< <3)-1); printf("x = 0x%0xn",x); // 0b1111 1111 return 0;}
运行结果2、末尾连续N位都置0
例如,将0xFF的低4位都置0代码示例#include < stdio.h >int main() { int x = 0xFF; // 0b1111 1111 x &= ~((1< <4)-1); printf("x = 0x%0xn",x); // 0b1111 0000 return 0;}
运行结果3、末尾连续N位取反
例如,将0xFA的低4位都取反代码示例#include < stdio.h >int main() { int x = 0xFA; // 0b1111 1010 x ^= ((1< <4)-1); printf("x = 0x%0xn",x); // 0b1111 0101 return 0;}
运行结果小结
通过这篇文章,我们学会了用位运算符<<
的4种高级用法
1、计算2的整数次幂
2、将一个字节序列合并为一个整数
3、标记码
4、掩码
在下一篇文章中,我们将介绍位运算符>>
的一些高级用法。