嵌入式软件知识总结

1.sizeof(char*) 这个语句的意思是得到 char* 类型的字节数, char* 是一个指针类型,占4个字节,所以运行结果应该是4.

2.strlen和sizeof区别。

sizeof是算符,strlen是函数。sizeof可以用类型做参数,strlen只能用char*做参数。

strlen指字符的长度,char a[20]="you are a",strlen(a)=9,sizeof(a)=20;sizeof指文件或者数据占的内存(字节),int a[20],sizeof(a)=80。

3.整数数组清零:bzero(),memset()。

4.异步IO和同步IO区别
 如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完,相反,异步IO操作在后台运行,
 IO操作和应用程序可以同时运行,提高系统性能,提高IO流量; 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行,而异步文件IO中,
 线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求后,将会通知线程IO操作完成了。

5.char在c语言中占一个字节,共4位,大小为-128-127.故0x80=-128

int foo(void)
{
 int i;
 char c=0x80;
 i=c;
 if(i>0)
  return 1;
 return 2;
}返回值为2;因为i=c=-128;如果c=0x7f,则i=c=127。

6.位运算比乘除以及取模运算效率要高;

a=b*2 -> a=b<<1;
 a=b/4 -> a=b>>2;
 a=b%8 -> a=b&7;//仅仅适用于除数为2的次方情况,10%3则不适用
 a=b/8*8+b%4 -> a=((b>>3)<<3)+(b&3)
 a=b*15 -> a=(b<<4)-b

7.异或运算又称“半加运算”,即满2取0不进位,例:1^1=0,1^0=1,0^1=1;0^0=0;

0x1001^0x1100=0x1101;

由上图中加黑式可知,异或运算可用来取反,即无论0或1与1异或均可得到其相反数。

故:

如何对一个十六进制数的某一位取反,用C语言写?

第n位取反同(1 <

0X2F第三位取反,则0x2F^(1<<2)=0x2B;//注意是第三位而非bit3!

8.大端小端是两种不同的数据储存格式;

小端:低位字节数据存储在低地址
 大端:高位字节数据存储在低地址
 例如:int a=0x12345678;(a首地址为0x2000)
 0x2000  0x2001  0x2002  0x2003
  0x12    0x34    0x56    0x78      大端格式

9.&和&&的区别:

& 不管前面的条件是否正确,后面都执行
&& 前面条件正确时,才执行后面,不正确时,就不执行,就效率而言,这个更好。
&&”是逻辑运算中的“短路”,若"&&"前的条件为false时判断结果为false,不再执行"&&"后的语句块。"&&"前为true则继续进行进行后半部分的判断 。

如果&&运算符的第一个操作数是false,就不需要考虑第二个操作数的值了,因为无论第二个操作数的值是什么,其结果都是false。同样,如果第一个操作数是true,||运算符就返回true,无需考虑第二个操作数的值。但&和|却不是这样,它们总是要计算两个操作数。

 

 

 

 

 

 

你可能感兴趣的:(嵌入式软件问题归纳)