然后我们可以使用上面这个宏函数来完成在C语言环境中对信号变量的某些bit位进行操作,参考如下代码: //定义一个16位宽的wdata变量 uint16_t wdata; //对其赋初值为16'habcd wdata = 0xabcd; //改变第0~3bit的值为f,则最终值为16'habcf wdata = SET_BITS_N_M_Y(wdata, 0, 3, 0xf); 其实知道以...
#defineGET_BIT(value,bit)((value)&(1<<(bit)))//读取指定位#defineCPL_BIT(value,bit)((value)^=(1<<(bit)))//取反指定位#defineSET0_BIT(value,bit)((value)&=~(1<<(bit)))//把某个位置0#defineSET1_BIT(value,bit)((value)|=(1<<(bit)))//把某个位置1 位操作函数 这4个宏定义...
五.用宏定义来实现位操作 1.其实目的就是把几行的代码写到一行去(难度也是在这里),我们直接看代码,自己领悟。 1 #include <stdio.h> 2 3 //这里就是要把数字x的第n位(bit(n-1)位)置为1 4 //1U就表示的是无符号的1,宏定义可以传参的 5 #define SET_BIT(x,n) (x | 1U<<(n-1)) 6 7 /...
一,位操作一般用法 1,特定位清零用“&”。 要想把一个数的特定位清零,就需要构造另一个数,这个数的对应特定位为0,其他位为1。2 2,特定位置1用“|”。 要想把一个数的特定位置1(设置特定位),就需要构造另一个数,这个数的对应特定位为1,其他位为0。 3,特定位取反用“^”。 要想把一个数的特定位...
算式实现: 先得到32位1: ~0U 将第3)得到的数,右移(32-(m-n+1))位就得到了低(m-n+1)全为1,其他高位为0的数 (~0U)>>(32-(m-n+1)) 5. 之后并左移n位后位与(|)操作 代码验证: 宏定义实现多位置位 截取变量的部分连续位 #defineGET_BITS(x, n, m) ((x & ~(~(0U)<<(m-n+1...
也有程序员采取如下宏定义的方法实现单个位的操作,使用十分方便: #define SET_BIT(x,y) ((x)|=(0x0001<<(y)))//置x的第y位 #define CLR_BIT(x,y) ((x)&=~( 0x0001<<(y)))//清x的第y位为0 #define CPL_BIT(x,y) ((x)^= (0x0001<<(y)))//取反x的第y位 ...
本文将一步一步地给出两种实现,第一种不够优雅,但也能用;第二种给出优雅的宏实现版本。 本文实现的map是基于冲突链的方式实现。 简单版本 一个map或者hash表,基本结构是n个桶槽位,每个槽位下面挂一个冲突key的链表。如 bucket | bucket | bucket |...(k,v) | (k,v) | (k,v) |...(k,v) |...
1.4 ^按位异或操作使用技巧 该功能非常适合用于控制某个位翻转,常见的应用场景就是控制LED闪烁,如下: GPIOB->ODR ^= 1 << 5; 执行一次该代码,就会使PB5的输出状态翻转一次,如果我们的LED接在PB5上,就可以看到LED闪烁了。 02 define宏定义 define是C语言中的预处理命令,它用于宏定义(定义的是常量),可以提...
首先我们的宏在编译阶段会直接和代码替换本次的宏就将printf函数内容进行了替换使SQUARE(3+2)替换成了3+2*3+2这样我们就得到了11的值。 所以使用宏的时候一定要加括号!加括号! #include<stdio.h> #define SQUARE(x) ((x) * (x)) ...
您在查找太双c切鼠标宏设置吗?抖音短视频帮您找到更多精彩的视频内容!让每一个人看见并连接更大的世界,让现实生活更美好