写(抄)了一段c程序,用来判断机器存储器存储数值(当然不仅数值)时候用的是小端法还是大端法。先把int或者float转换成char指针,或者unsigned char指针,然后一个一个字节的输出,其中char_with_or_not_unsigned是编译后的可执行文件名:
yymt@fanhua:~$ ./char_with_or_not_unsigned 123
int:
char pointer: 7b 00 00 00
unsigned char pointer: 7b 00 00 00
float:
char pointer: 00 00 fffffff6 42
unsigned char pointer: 00 00 f6 42
输入123时候,int值的输出是相同的,而float值不同。123的16进制表示是0x7b,这里判断出是小端法。
当输入1234的时候,有符和无符输出就都不同了(其中1234的16进制表示是0x04d2):
yymt@fanhua:~
$ ./char_with_or_not_unsigned 1234
int:
char pointer: ffffffd2 04 00 00
unsigned char pointer: d2 04 00 00
float:
char pointer: 00 40 ffffff9a 44
unsigned char pointer: 00 40 9a 44
注意,int转型成char pointer输出的时候,第一个字节都多出一串fffff,为什么呢?
我的机子是ubuntu 11.10 server版,64位的。另,这里都是小端法表示的。
代码是:
#include<stdio.h>
typedef char* char_pointer;
typedef unsigned char* uchar_pointer;
void print_byte(char_pointer v,int len){
for(int i = 0;i < len;i++){
printf(" %.2x",v[i]);
}
printf("\n");
}
void print_ubyte(uchar_pointer v,int len){
for(int i = 0;i < len;i++){
printf(" %.2x",v[i]);
}
printf("\n");
}
int main(int argc,char* argv[]){
if(argc == 1){
return 0;
}
int a = atoi(argv[1]);
float f = (float)a;
printf("int:\n");
printf(" char pointer: ");
print_byte((char_pointer)&a,sizeof(int));
printf(" unsigned char pointer:");
print_ubyte((uchar_pointer)&a,sizeof(int));
printf("float:\n");
printf(" char pointer: ");
print_byte((char_pointer)&f,sizeof(float));
printf(" unsigned char pointer:");
print_ubyte((uchar_pointer)&f,sizeof(float));
return 0;
}
分享到:
相关推荐
- 目的:判断当前计算机是否采用小端法存储数据。 - 方法:定义一个联合体类型,包含一个32位整数和一个指向该整数的字节指针。设置整数为0x01020304,然后检查第一个字节是否为0x04,如果是,则表示为小端法,...
1. 设计一个程序来判断机器是大端模式还是小端模式。 2. 设计一个程序来检查内存变量(如结构体或数组)是否按边界对齐。 **实验报告要求**: - 提供源程序(文本文件)和执行结果。 - 回答以下问题: - 机器是...
8. **数据存储顺序**:大端法和小端法决定了数据在内存中的存储顺序,大端法将高有效位放在低地址,小端法则反之。 9. **数码校验**:奇偶校验、海明校验和CRC码用于检测数据传输或存储中的错误。奇偶校验简单但...
其中,加减对阶只能右移不能左移,右移阶码增大,丢失低位尾数求和规格化:要让尾数的最高位数值位和符号位不同,直到变成00.1或11.0的形式舍入0舍1入法末尾恒置1法溢出判断规格化后根据阶码来判断是否溢出阶码为01...
理解二进制表示和字节顺序(如小端序或大端序)是关键。 2. 数组表示法:大整数通常用数组来表示,数组的每个元素是大整数的一部分。可以是字节、半字、字或双字,取决于处理器架构和可用内存。 3. 运算逻辑:加法...
数据的存储格式有大端和小端模式之分,影响数据在内存中的排列顺序。此外,奇偶校验码、海明码和CRC码是常用的错误检测和纠正机制。 运算方法和运算部件中,补码运算是处理负数的关键,逻辑和算术移位会影响数值的...
15. 最高有效字节(MSB)和最低有效字节(LSB)用于描述字节在内存中的顺序,大端方式和小端方式分别指高低位字节的存储位置。 16. C语言中数据地址通常指MSB,不同存放方式可能导致数据交换和通信时出现问题,如...
例如,使用is_little_endian函数来判断系统是否采用小端字节序。 3. 信息表示和处理:文档提到了如何在计算机中表示和处理信息,涉及到了位操作和位移操作的知识。位移操作包括算术右移和逻辑右移。算术右移会保留...
字节序通常有两种类型:小端序(little-endian)与大端序(big-endian)。在小端序系统中,数据的低位字节存储在较低的地址位置;而在大端序系统中,数据的高位字节存储在较低的地址位置。 ```c int is_little_...
- **函数目的**:判断当前计算机系统是小端模式还是大端模式。 - **实现思路**: - 初始化一个整型变量`a`,并赋值为1。 - 使用类型转换将整型指针转换为字符型指针,并间接访问该整型变量的内存地址。 - 如果...
- 小端模式: 最低位字节存储在最低地址, 0x20000处存放0x78, 0x20001处存放0x56, 以此类推。 - 大端模式: 最高位字节存储在最低地址, 0x20000处存放0x12, 0x20001处存放0x34, 以此类推。 **5. 试述I/O设备与主机...
由于 `1` 的二进制表示为 `00000001`,如果返回值为 `1`,则表示该系统采用的是小端模式,即数值的低字节存储在内存的低地址处;反之,如果返回值不为 `1`,则系统采用大端模式,即数值的高字节存储在内存的低地址处...