您的位置:首页 > 编程语言 > C语言/C++

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

2017-05-09 23:48 176 查看

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐