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
- c/c++整理--位运算与嵌入式编程(3)
- c/c++整理--位运算与嵌入式编程(1)
- c/c++整理--位运算与嵌入式编程(2)
- 位运算与嵌入式编程
- C#、SQL位运算整理
- C语言位运算整理
- C语言位运算的高级应用(尤其适合单片机和嵌入式编程)
- 第十二章 位运算与嵌入式编程
- 位运算(C/C++)
- 【资料整理】C语言位运算总结
- 【资料整理】C语言位运算总结
- 【资料整理】C语言位运算总结
- 嵌入式C语言位运算之清位置位
- 位运算与嵌入式编程之位制转换之一
- C语言嵌入式系统编程修炼[整理]
- 单片机与嵌入式系统中C语言的位运算小记
- Objective-C位运算符-按位与运算符
- C++(二) 位运算
- 用C语言模拟实现C++多态
- hdu 1466 计算直线的交点数 dp
- shell脚本获取输出到终端的所有信息
- 贪心算法基础之独木舟问题 51nod 贪心教程
- Maven常用命令
- c/c++整理--位运算与嵌入式编程(3)
- Lintcode47 Majority Number II solution 题解
- RxJS异步通信之combineLatest和Zip
- [编程之美-04]字符串的全排列
- XML 学习小记
- FFT
- 线程池的原理 精简了一下便于大家理解
- 序列化和反序列化
- 应用程序编译安装的过程