试题1:请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 int checkCPU( ) {
{
union w
{
int a;
char b;
} c;
c.a = 1;
return (c.b ==1);
}
}
剖析: 嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节, Big-endian 模式的CPU对操作数的存放方式是从高字节到低字节。 在弄清楚这个之前要弄清楚这个问题: 字节从右到坐为从高到低! 假设从地址0x4000开始存放: 0x12345678,是也个32位四个字节的数据,最高字节是0x12,最低字节是0x78: 在Little-endian模式CPU内存中的存放方式为: (高字节在高地址, 低字节在低地址)
内存地址0x4000 0x4001 0x4002 0x4003
存放内容 0x78 0x56 0x34 0x12
大端机则相反。
有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。 因此在一个处理器系统中,有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦,这要求系统设计工程师,必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器,指令集,系统总线等各个层次中。 联合体union的存放顺序是所有成员都从低地址开始存放的。 以上是网上的原文。让我们看看在ARM处理器上union是如何存储的呢? 地址A ---------------- |A |A+1 |A+2 |A+3 |int a; | | | | -------------------- |A |char b; | | --------- 如果是小端如何存储c.a的呢?
地址A -----------
------------------- |A |A+1 |A+2 |A+3 | int a;
|0x01 |0x00 |0x00 |0x00 | ------------------------------------- |A |char b; | | ---------
如果是大端如何存储c.a的呢?
地址A ---------------------
--------- |A |A+1 |A+2 |A+3 |int a; |0x00 |0x00 |0x00 |0x01 | ------------------------------------------ |A |char b; | | --------- 现在知道为什么c.b==0的话是大端,c.b==1的话就是小端了吧。
分享到:
相关推荐
- 日志归档模式决定了数据库的日志记录方式,此查询可以判断数据库是否处于归档模式。 - **打开模式**: `SELECT open_mode FROM v$database;` - 数据库可以以不同的模式打开,例如读写或只读模式等。 - **数据库...
使用环境变量和条件判断,可以编写函数`get_client_ip()`来获取真实的客户端IP。 #### 16. include和require的区别 - `require`在文件不存在时会引发致命错误,停止脚本执行。 - `include`在文件不存在时仅产生...
数组和Here Document是更复杂的变量类型,用于存储多值或大段文本。 4. **通配符和I/O重定向** 通配符如`*`, `?`, `[...],`用于匹配文件名。I/O重定向允许将输入、输出和错误流定向到文件或其他进程,如`和`>`用于...
通过复制选定的空行,使用替换对话框中的“查找内容”和“替换为”功能,可以快速删除大段空行,或者将大段空行替换为一行空行。此外,多行内容替换模式的应用确保了替换操作的准确性,避免了重复劳动。 对于单行...
分段输出级的设计是根据负载电流的变化将输出级分为多个小段和大段,总共5个小段加上4个大段。这种设计可以根据负载电流的变化自适应地调节分段数量,实现输出级的平滑过渡。在连续电流模式下,采用分段电流检测场...
在保护模式下,80386处理器允许段跨越多个页面,同时提供了分页功能,使得大段数据可以被分散在物理内存中。分页不仅实现了内存的动态管理和保护,还允许处理保护异常,例如通过设置页表中的权限位来控制对只读或...
5. 归并排序:同样基于分治,将数组拆分成小段,再合并成有序大段,时间复杂度为O(nlogn)。 6. 堆排序:利用堆数据结构实现排序,时间复杂度为O(nlogn)。 7. 计数排序、桶排序、基数排序:这些是线性时间复杂度的非...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一系列特殊字符和语法构造出规则,用来匹配符合特定模式的字符串。在本教程中,...
- **Pattern Matching for instanceof**:增强了`instanceof`关键字的功能,允许模式匹配,提高代码的可读性和安全性。 - **Switch Expressions (Preview)**:扩展了`switch`语句,使其支持表达式形式,简化了条件...
- `fopen`: 这个函数用于打开一个文件,参数分别为文件名和访问模式(如"r"表示读取,"w+"表示写入并追加)。`NULL`返回值表示打开失败。 - `fclose`: 关闭已打开的文件,确保数据被正确写入和资源被释放。 - `...
- **小步快跑**:每次重构的改动应该尽可能小,便于快速验证和回滚。 - **测试驱动**:在重构前确保有充分的单元测试,重构后通过测试确保功能正确性。 3. **重构策略** - **提取函数**:将大段代码拆分成小函数...
- **提取方法**:将大段代码提炼为独立的方法,以增加代码复用和可读性。 - **移动字段**:将字段从一个类移到更适合的类中,以更好地反映类的职责。 - **引入参数对象**:将多个参数组合成一个对象,减少参数...
这项技术的核心在于如何准确地度量两个程序之间的相似度,进而判断是否存在剽窃行为。相似度度量的结果通常是一个数值,该数值能够反映两段代码在结构、逻辑等方面的相似程度。此外,相似度度量技术还被广泛应用于...
- **表达式**:利用公式和函数进行数据计算,支持复杂的逻辑判断。 - **行相关**:包括行的增删改查等操作。 - **列相关**:对列进行操作,如添加、删除、调整列宽等。 - **编辑数据**:在单元格中输入、编辑...
5.5 在使用非零位模式作为空指针的内部表示的机器上,NULL 是如何定义的? 56 5.6 如果NULL定义成#define NULL((char *)0) ,不就可以向函数传入不加转换的NULL 了吗? 57 5.7 我的编译器提供的头文件中定义的...
正则表达式是一种强大的文本模式匹配工具,它可以用来验证字符串是否符合特定的格式,或者从大段文本中提取符合规则的信息。在内涵词语分析中,正则表达式可能用于识别特定的词汇结构,如成语、俚语或网络流行语。 ...
2. **模块化**:将大段代码拆分为小而独立的模块,有助于降低复杂性,提高代码复用。可以使用`export`和`import`语句来组织模块,遵循单一职责原则。 3. **函数提取**:如果一个函数过于庞大,应将其分解为多个小...
- **实践**: 初始化、条件判断和更新操作应在循环控制结构中明确给出。 **4.6 SWITCH语句** - **知识点**: 用于多分支选择的结构。 - **实践**: 使用 `break` 语句来结束每个 case 分支。 **4.7 GOTO语句** - **...
GIF格式特别适合于简单的图形和图标,以及需要简单动画效果的场合,如网站上的动态图标或小动画。 ### 9. 处理多媒体文件的常见方法 **知识点概述:** - 处理多媒体文件的方法。 - 常见的多媒体文件格式及其优缺点...