无符号数和带符号整数的表示

一、实验目的、要求:
实验目的:
了解数据在机器中的存放方式。

实验要求:
1.设计一个程序以检查你的机器是大端方式还是小端方式。
2.设计一个程序以检查内存变量(如结构或数组)是否按边界
对齐。

二、实验仪器设备、器件及环境:
仪器设备名称 备注
DevC++ 编程实现
三、实验原理、方法:
使用编程软件来实现。C语言中允许无符号整数和带符号整数之间的转换,转换后数的真值是将原二进制机器数按转换后的数据类型重新解释得到的。
四、实验内容、步骤:
1、写出源代码
2、编译执行结果
3、分析和解释所得结果
五、实验现象、结果
1、源程序和执行结果截图
一.大小端:
#include <stdio.h>
int main(void)
{
union
{
short n;
char c[sizeof(short)];
}un;
un.n = 0x0102;
if ((un.c[0] == 1 && un.c[1] == 2)) //判断这种情况是大端还是小端
printf(“大端模式!\n”);
else if ((un.c[0] == 2 && un.c[1] == 1)) //判断这种情况是大端还是小端
printf(“小端模式!\n”);
else printf(“error!\n”);
return 0; }
在这里插入图片描述

大端模式,指的是数据的高字节保存在内存低地址中,而数据的低字节保存在高内存高的地址中,数据由小向大增加,而数据从高往低放,小端与之相反。

二.边界对齐:
#include<stdio.h>
struct t1{
char a0;
int a1;
char a2;
char a3;
};
struct t2{
int a0;
double a1;
};
int main(){
printf(“sizeof(int)=%1u\n”,sizeof(int));
printf(“sizeof(char)=%1u\n”,sizeof(char));
printf(“sizeof(double)=%1u\n”,sizeof(double));
printf(“sizeof(struct t1)=%1u\n”,sizeof(struct t1));
printf(“sizeof(struct t2)=%1u\n”,sizeof(struct t2));
}
在这里插入图片描述

结构成员在内存中的存储并不是想当然的一个接一个紧挨着排列下来的,由于提高数据读取速度的要求,计算机系统对内存中基本数据内省的存放存在内存对其就只,几要求这些数据的首地址必须是某个数的整数倍。
六、实验体会
通过本次实验,我知道了自己的电脑是小端模式,并且还明白内存变量是按边界对齐,以损耗空间换取时间的方式,加速了CPU的执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值