下面使用位运算来实现一些基本的操作和基本的函数,这些实现全部都是宏,这是高效率的关键。

/* base.h:基本操作的位运算实现 */

#ifndef BASE_H

#define BASE_H

#define word int

#define uword unsigned int

/* 将最右侧的1位改成0位 */

#define right1to0(x) ((x)&((x)-1))

/* 向右传播最右侧的1位 */

#define right1torig(x) ((x)|((x)-1))

/* 将最右侧的连续1位串改成0位串 */

#define right1sto0s(x) (((x)|(x)-1)+1 & (x))

/* 检查无符号整数x是否为2的幂,注意&的优先级低于==,需要括号 */

#define powof2u(x) (((x)&((x)-1))==0)

/* 检查无符号整数x是否为2**n-1的形式 */

#define pow2sub1u(x) (((x)&((x)+1))==0)

/* 检查无符号整数x是否为2**j-2**k形式 */

#define pow2subpow2u(x) ((((x)|(x)-1)+1 & (x))==0)

/* 下列掩码直接析出字中指定的位 */

/* 析出最右侧的1位 */

#define right1(x) ((x) & -(x))

/* 析出最右侧的0位 */

#define right0(x) (~(x)&((x)+1))

/* 析出后缀0 */

#define suffix0(x) (((x)&-(x))-1)

/* 析出最右侧的1位和后缀0(即后缀10...0) */

#define suffix10s0(x) ((x) ^ (x)-1)

/* 下列掩码与字做&运算,可以析出字中指定的字段 */

/* 析出高阶n位(注意n的值不能大于int型的宽度) */

#define high_ones(n) (-1<<32-(n))

/* 析出低阶n位 */

#define low_ones(n) (~(-1<

/* 析出低阶offset位和高阶32-offset-width位 */

#define mid_zeros(width,offset) /

(-1<

/* 析出中间width位,它右侧有offset位 */

#define mid_ones(width,offset) /

(~(-1<

/* 对无符号整数x,求比x大且与x中的位1个数相同的下一个整数:

例如对nnn0 1111 0000,则下一个整数为nnn1 0000 01111。

可以用这个函数来遍历一个集合的所有子集 */

#define nextsame1u(x) (right1(x)+(x) | /

(((x)^right1(x)+(x))>>2)/right1(x))

/* 字的绝对值函数:注意x>>31为0或-1,而x^0=x,x^-1=~x */

#define abs(x) (((x)^((x)>>31))-((x)>>31))

/* 绝对值的负值 */

#define nabs(x) (((x)>>31)-((x)^((x)>>31)))

/* 符号扩展:将第7位向左传播(位编号从0开始) */

#define prop7thtolef(x) ((((x) & 0x000000FF) ^ 0x00000080)-0x00000080)

/* 对无符号整数实现算术右移:也可用更简单的((signed)(x)>>n) */

#define arithrshiftu(x,n) ((((x)^0x80000000)>>(n))-(0x80000000>>(n)))

/* 对有符号整数实现逻辑右移:也可用更简单的((unsigned)(x)>>n) */

#define logicrshift(x,n) ((((x)^0x80000000)>>(n))+(1<<31-(n)))

/* 符号函数:x>0返回1,x=0返回0,x<0返回-1 */

#define sign(x) (((x)>0)-((x)<0))

/* 三值比较函数:x>y返回1,x=y返回0,x

#define cmp(x,y) (((x)>(y))-((x)

/* 符号传递函数:返回采用y的符号后的x */

#define copysign(x,y) ((abs(x)^((y)>>31))-((y)>>31))

/* 比较谓词:带符号整数 */

#define equal(x,y) (~((x)-(y)|(y)-(x))>>31)

#define noteq(x,y) (((x)-(y)|(y)-(x))>>31)

#define less(x,y) ((((x)^(y)) & ((x)-(y)^(x)) ^ (x)-(y))>>31)

#define larger(x,y) ((((y)^(x)) & ((y)-(x)^(y)) ^ (y)-(x))>>31)

#define lesseq(x,y) ((((x)|~(y)) & ((x)^(y) | ~((y)-(x))))>>31)

#define largereq(x,y) ((((y)|~(x)) & ((y)^(x) | ~((x)-(y))))>>31)

/* 比较谓词:无符号整数 */

#define equalu(x,y) (~((x)-(y)|(y)-(x))>>31)

#define notequ(x,y) (((x)-(y)|(y)-(x))>>31)

#define lessu(x,y) ((~(x) & (y) | ~((x)^(y)) & (x)-(y))>>31)

#define largeru(x,y) ((~(y) & (x) | ~((y)^(x)) & (y)-(x))>>31)

#define lessequ(x,y) (((~(x)|(y)) & (((x)^(y)) | ~((y)-(x))))>>31)

#define largerequ(x,y) (((~(y)|(x)) & (((y)^(x)) | ~((x)-(y))))>>31)

/* 溢出检测:带符号运算 */

#define addovf(x,y) ((~((x)^(y))&(((x)+(y))^(x)))>>31)

#define subovf(x,y) ((((x)^(y))&(((x)-(y))^(x)))>>31)

#define mulovf(x,y) ((y)<0 && (x)==0x80000000 || (y)!=0 && (x)*(y)/(y)!=(x))

#define divovf(x,y) ((y)==0 || (x)==0x80000000 && (y)==-1)

/* 溢出检测:无符号运算 */

#define addovfu(x,y) (~(x)

#define subovfu(x,y) ((x)

#define mulovfu(x,y) ((y)!=0 && (x) > 0xffffffff/(y))

#define divovfu(x,y) ((y)==0)

/* 循环移位:带符号整数 */

/* 循环左移n位 */

#define rotlshift(x,n) ((x)<>32-(n))

/* 循环右移n位 */

#define rotrshift(x,n) ((unsigned)(x)>>(n) | (x)<<32-(n))

/* 循环移位:无符号整数 */

#define rotlshiftu(x,n) ((x)<>32-(n))

#define rotrshiftu(x,n) ((x)>>(n) | (x)<<32-(n))

/* 正差函数:x>=y时返回x-y,x

#define doz(x,y) ((x)-(y)&~((x)-(y)^((x)^(y))&((x)-(y)^(x)))>>31)

/* 大值函数 */

#define max(x,y) ((y)+doz(x,y))

/* 小值函数 */

#define min(x,y) ((x)-doz(x,y))

/* 下面是无符号版本 */

#define dozu(x,y) ((x)-(y)& arithrshiftu(((x)|~(y))&((x)^(y)|~((x)-(y))) ,31))

#define maxu(x,y) ((y)+dozu(x,y))

#define minu(x,y) ((x)-dozu(x,y))

/* 交换变量的值 */

#define swap(x,y) /

do { x=x^y; y=y^x; x=x^y; } while(0)

/* 根据掩码来交换变量的相应字段:

当m的第i位为1时,交换x,y的第i位;当m的第i位为0时,保留x,y的第i位不变 */

#define swapbits(x,y,m) /

do { x=x^y; y=y^(x&(m)); x=x^y; } while(0)

/* 2个常量的循环赋值:当x为a时赋值b,当x为b时赋值a */

#define rottwo(x,a,b) do{ x=(a)^(b)^x; }while(0)

/* 3个常量的循环赋值 */

#define rotthree(x,a,b,c) /

do{ x=(-(x==c)&(a-c))+(-(x==a)&(b-c))+c; }while(0)

#endif

matlab mck传递函数,我的C实践(4):基本操作的位运算实现相关推荐

  1. 《MATLAB App Designer从入门到实践》随书源代码

    GUIDE已经被MATLAB抛弃了,你还不知道吗?App Designer才是发展的方向 目前市面上MATLAB GUI编程的书籍琳琅满目,但大多数是基于GUIDE开发的,MATLAB从2016年开始 ...

  2. 利用MATLAB画传递函数的奈奎斯特曲线

    利用MATLAB画传递函数的奈奎斯特曲线 1.传递函数 tf函数 延迟环节 2.画奈奎斯特曲线 全频曲线 半频曲线 3.示例 1.传递函数 tf函数 对于函数: G(s)=∑j=0mbjsm−j∑i= ...

  3. Matlab中传递函数的几种输入方式

    文章目录 1:Matlab中传递函数的几种输入方式 1.1.显示多项式的传递函数 1.2.因子形式的传递函数 1.3.显示零极点式传递函数 1.4.直接传递函数输入 2:传递函数多项式形式和零极点形式 ...

  4. matlab中传递函数的离散化

    matlab中传递函数的离散化 转载▼ 标签: 差分方程 传递函数 采样周期 转化 c2d 分类: Matlab matlab中,传递函数离散化,特别是转化为差分方程,可以使用c2d实现,系数直接转化 ...

  5. 基于MATLAB的BR神经网络交叉验证实践

    基于MATLAB的BR神经网络交叉验证实践 在做项目需要对BR神经网络进行K-Flod交叉验证并最终得到结果,于是写了这个代码. // Author LJS clearload allData.mat ...

  6. matlab求传递函数在某一频率的增益

    matlab求传递函数在某一频率的增益 设计PI参数编程时,想用matlab求传递函数在某一频率处的增益,这样在编程时可以一口气将内环与外环传递函数设计出来而不需要设计出来内环之后先看看长什么样,然后 ...

  7. MATLAB建立传递函数的方法

    MATLAB建立传递函数的方法 传递函数 TF对象构造法 num =[1 5];den=[1 16 51 36];G=tf(num,den); conv命令法 num=[1 5];den=conv([ ...

  8. matlab仿真Gz转换为差分方程,怎么用matlab把传递函数转成差分方程

    怎么用matlab把传递函数转成差分方程 以下是PID控制的部分代码(matlab的m文件): ts=0.001;采样时间=0.001s sys=tf(400,[1,50,0]);建立被控对象传递函数 ...

  9. MATLAB代码:基于二阶锥优化及OLTC档位选择的配电网优化调度

    MATLAB代码:基于二阶锥优化及OLTC档位选择的配电网优化调度 关键词:OLTC档位选择 二阶锥优化 动态优化 最优潮流 参考文档:<主动配电网最优潮流研究及其应用实例>仅参考部分模型 ...

最新文章

  1. 卧槽?用 Python 还能玩 Git?
  2. 在vue中没有数据的渲染方法
  3. 游戏开发中的数据表示
  4. 原生JavaScript轮播图效果实现
  5. TensorFlow2-操作
  6. 【转载】可能是把Docker的概念讲的最清楚的一篇文章
  7. STM32F103 TIM4定时器
  8. 查找某个整数(数组)
  9. BestCoder Round #70
  10. 计算机粘贴复制知识,不能复制粘贴怎么办?Win7电脑不能复制粘贴是什么原因及解决方法...
  11. Mysql优化之explain你真的会吗?
  12. oracle的sql硬解析和软解析,[ORACLE]oracle SQL执行过程 软解析(soft prase)硬解析(hard prase)以及 Soft Soft Parse...
  13. 网络电视(IPTV)系统解决方案
  14. 华为机考108题(c++)(101-108)
  15. 一篇文章搞定嵌入式看门狗watch dog概述与示例代码
  16. 网线如何制作和如何使用?
  17. 机器学习 -- 《机器学习》(周志华) 第三章
  18. 文件的打开和关闭,fopen()和fclose
  19. MySQL常用的系统函数
  20. 音视频传输中时间戳小头处理方式

热门文章

  1. 前端开发问题 大杂烩
  2. 四川内江现天眼猫 额头正中间长眼睛
  3. 原生 和html5 性能,原生开发与HTML5开发的对比
  4. 图片HTML标记是,HTML网页图片标记
  5. SPSS-概率单位回归分析Probit回归 (随笔笔记)
  6. 三类完整性规则mysql下规则实现短语_关系数据库有三类完整性规则,分别是参照完整性规则、用户自定义的完整性和()规则。...
  7. 收藏很久的开关电源书籍
  8. 未越狱iPhone访问限制密码忘了怎么办
  9. 8、接口与面向接口编程
  10. Windows使用Docker出现exit 139错误