c/c++整理--位运算与嵌入式编程(3)

来源:互联网 发布:软件界面图标 编辑:程序博客网 时间:2024/06/05 05:43

一、看代码写输出——整数的自动转换

void foo(void){unsigned int a = 6;int b = -20;if(a+b > 6){puts(">6");}else{puts("<=6");}}
这里需要注意的是,无符号数与有符号数之间运算的时候,有符号数要转换成无符号数再进行运算。这里很显然,-20转换成一个无符号数后是一个非常大的一个数。所以这里输出>6.

二、关键字static的作用是什么

(1)在函数体中,static变量在函数结束后不会被销毁,其值不会变。
(2)static全局变量,可以在本文件中被访问,在同一工程中的其他文件中不可见。
(3)static函数,可以在本文件中被访问,在同一工程中的其他文件不可见。

三、关键字volatile有什么含义

一个定义为volatile的变量是说这个变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确的说,就是优化器在用到这个变量时必须每次都小心地重新读取这个变量的值而不是使用保留在寄存器里的备份。
举例:
(1)并行设备的硬件寄存器(如状态寄存器);
(2)一个中断服务子程序会访问到的非自动变量;
(3)多线程应用中被几个任务共享的变量。


四、判断处理器是Big_endian还是Little_endian

编写函数,判断处理器是Big_endian还是Little_endian
int checkCPU(){union w{int a;char b;} c;c.a = 1;return (c.b == 1);}
小端模式的CPU高位地址对应高位数据,地位地址对应地位数据。大端模式相反。联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性轻松获得了结果。

五、评价代码片段——处理器字长

unsigned int zero = 0;unsigned int compzero = 0xffff;/*1's compzero of zero*/
对于一个不是16位的处理器来说,上面的代码是不正确的,应编写如下:
unsigned char compzero = ~0 

0 0
原创粉丝点击