加载中...
温习一些基本运算和常用算法
发表于:2009-11-24 | 分类: 嵌入式编程
字数统计: 1k | 阅读时长: 4分钟 | 阅读量:

位取反 由0变1,由1变0

  • a=!a
  • 条件判断然后赋值
  • 取余运算, (value+1)%2
  • 与1异或  A^=1 一个数本身与1异或,是1则为0,是0则为1,可达到取反的作用

-————-排序和冒泡法

for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(a[j]<a[j+1])     {t=a[j];a[j]=a[j+1];a[j+1]=t;} 每一轮让最小的浮上去

-————-剥离位

BCD也是十六进制,在不大于9下的是和实际值对应的 剥离高2字节和低2字节 /65536用整数  %65536 高2字节作为整数,低2字节作为小数: (Int(\\本站点\一楼氧气压力测量值/65536)+\\本站点\一楼氧气压力测量值%65536/10000) 或者 StrFromReal(StrToInt(StrFromReal( \\本站点\一楼氧气报警值1/65536, 0, “f”))+\\本站点\一楼氧气报警值1%65536/10000,4,”f”); 将实数转化为高2字节为整数,低2字节为小数的四个字节: Int(\\本站点\一楼氧气报警值设置辅助变量)*65536+(\\本站点\一楼氧气报警值设置辅助变量-Int(\\本站点\一楼氧气报警值设置辅助变量))*10000

-——基本运算

按位或 或者 & 逻辑与 /取地址 && 逻辑与 &=按位与后赋值 =按位或后赋值 位运算 与&      都真才1 或       有1便1 非 ~     取反,不同于逻辑非! 异或(或非)^    不同为1 转化成与或非基本逻辑Y=A’B+AB’ 左移<< 相当于乘以2 右移>> 相当于除以2 ^ 异或 运算加赋值 a&=b 相当于 a=a&b a<<=2 相当于 a=a<<2 i++和++i,谁在前先操作谁;i++先取值后递增,++i先递增后取值 条件运算符:?: 平常还是用的比较少的,但有些情况下使用可使得程序更简洁 表达式为:表达式1?表达式2:表达式3 先求解表达式1, 若其值为真(非0)则将表达式2的值作为整个表达式的取值, 否则(表达式1的值为0)将表达式3的值作为整个表达式的取值。 c = a > b ? a : b; //Set c to the higher of a and b test ? exp1 : exp2; 如果test为真则去exp1,否则取exp2 相当于 if(a>b) c=a; else c=b; 条件表达式还可以写成以下形式: a>b? (a=100) : (b=100) 或 a>b? printf(“%d”,a) : printf(“%d”,b); 使用示例:txpackage[6] = getbit(key_status,i)>0?0x64:0; 区别常规逻辑运算 && 与 或 位逻辑运算应用: 屏蔽作用,&0 保留作用,&1或者 0或者^0 使为1 1 使为0 &0

移位

cardnumbertmp.byte>>=1 #define setbit(byte, n)     (byte =(1<<n)) 获得一个字节中的某一个位的值: 屏蔽其他位,保留特定位  &(1<<n) 清零特点位: 保留其他位,清零特定位  &~(1<<n) 置位特点位: 保留其他位,置1特定位 (1<<n) ——————— 减法运算:减去一个数,等于加上一个对应的负数,负数表示为补码加1 乘法运算:乘法运算等于移位和加法运算,如果没有硬件乘法器可以用软件实现 比如: 3×5=3×0101 =3*2^2+3*2^0 =3左移两位+3左侧移动0位 实际上并不按照这种方法运算,一次只会移动一位 乘法器原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位 除法:除法等于先比较,然后减去 —————————-

异或算法

取异 crc ^= *p++; 数据分离方法 分离十六进制 分离成十进制 位分离

上一篇:
51开发工具
下一篇:
定时器及其编程
本文目录
本文目录