在嵌入式C语言中,使用位操作程序有很好的可读性。以下就简单介绍以下常用的位操作。
常见的二进制位的变换操作
功能 | 示例 | 位运算 |
去掉最后一位 | (101101-->10110) | x>>1 |
在最后加一个0 | (101101-->1011010) | x<<1 |
在最后加一个1 | (101101-->1011011) | (x<<1)+1 或 (x<<1)|1 |
把最后一位变成1 | (101100-->101101) | x|1 |
把最后一位变成0 | (101101-->101100) | x|1-1 |
最后一位取反 | (101101-->101100) | x^1 |
从右数第K位变成1 | (101001-->101101,K=3) | x|(1<<(K-1)) |
从右数第K位变成0 | (101101-->101001,K=3) | x&(~(1<<(K-1))) |
从右数第K位取反 | (101001-->101101,K=3) | x^(1<<(K-1) |
取末三位 | (101101-->101) | x&7 |
取末K位 | (101101-->1101,K=4) | x&15 |
取右数第K位 | (1101101-->1,K=4) | (x>>(K-1))&1 |
把末K位变成1 | (101001-->101111,K=4) |
x|(1< |
把末K位取反 | (101001-->100110,K=4) |
x^(1< |
把右边连续的1变成0 | (100101111->100100000) | x&(x+1) |
把右起第一个0变成1 | (100101111->100111111) | x|(x+1) |
把右边连续的0变成1 | (11011000->11011111) | x|(x-1) |
取右边连续的1 | (11011111->11111) | (x^(x+1))>>1 |
去掉右起第一个1的左边 | (100101000->1000) | x&(-x) |
判断第7位是否为1 | if(x&0x40){……} | |
字节读取 | (x>>0)&0x000000FF | 获取第0个字节 |
字节读取 | (x>>8)&0x000000FF | 获取第1个字节 |
字节读取 | (x>>16)&0x000000FF | 获取第2个字节 |
判断奇偶数 | if(x&1==1){……} | |
判断两个数是否异号 |
int x = -1, y = 2; bool f = ((x ^ y) < 0); // true int x = 3, y = 2; bool f = ((x ^ y) < 0); // false |
|
求2的n次方 |
1<
|
|
高低位交换 |
unsigned short a = 34520; a = (a >> 8) | (a << 8); |
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
嵌入式
+关注
关注
5083文章
19129浏览量
305398 -
C语言
+关注
关注
180文章
7605浏览量
136885 -
位操作
+关注
关注
1文章
12浏览量
8564
原文标题:位操作运算
文章出处:【微信号:硬件会,微信公众号:硬件会】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
嵌入式C语言中常见不常用的语法有哪些
嵌入式C语言中常见不常用的语法1. 不定参数需要包含头文件#include "stdarg.h"头文件里主要包括一个变量类型va_list,三个函数va_start,va_arg
发表于 12-15 06:34
嵌入式C实现延时程序的不同变量的区别 几种Linux嵌入式开发环境的简单介绍
嵌入式C实现延时程序的不同变量的区别 几种Linux嵌入式开发环境的简单介绍 ARM嵌入式开发基
发表于 04-14 07:24
•1649次阅读
嵌入式C之位操作的应用
嵌入式位运算是嵌入式系统中常用的优化技巧之一,它可以通过位运算操作来实现一些常见的数学运算、逻辑运算等,从而提高程序的执行效率。
发表于 05-20 16:52
•729次阅读
评论