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,无需考虑第二个操作数的值。但&和|却不是这样,它们总是要计算两个操作数。
————————————————
如果没有看明白,可以观看视频进行学习:
嵌入式开发职业规划
http://www.makeru.com.cn/live/1392_308.html?s=143160
嵌入式行业发展跟现状分析
http://www.makeru.com.cn/live/1392_401.html?s=143160
完美简历该如何打造
http://www.makeru.com.cn/live/5562_1947.html?s=143160
欢迎进入嵌入式大神群进行学习 (858330377)