数据与内存(C)

关于这部分的笔记让我纠结了几个小时,我到底是该先写printf、scanf,
还是先写数据在内存中存放的形式。不管怎么纠结也没用,还是先写数据吧!

前面的笔记有提到计算机CPU采用的是二进制数制,只能进行二进制的数值运算。
在实际操作中,由于二进制太长太多,加上十六进制与二进制之间转换十分方便,
所以一般用十六进制表示其二进制数值,因此,可以看一些调试器中的分析码都
为十六进制。

二进制数一个数等于1位(bit)
一个十六进制数等于4位(bit)
一字节(byte)等于8位(bit)
一字节等于两十六进制数

基本数据类型(32位操作系统下VC++6.0)
short int 2个字节    16位
int       4个字节    32位
long int  4个字节    32位
float     4个字节    32位
double    8个字节    64位
char      1个字节     8位

#include <stdio.h>
int main(int argc, char* argv[])
{
    char      a = 'a';
    int       b = 10;
    short int c = 10; 
    float     d = 10.0f;
    double    e = 10.0;
    return 0;
}

通过VC++6.0的调试器查看数据abcde的情况
地址       数据
0012FF68    00 00 00 00
0012FF6C    00 00 24 40   => e => 10.0  => 0x4024 0000 0000 0000
0012FF70    00 00 20 41   => d => 10.0f => 0x4120 0000
0012FF74    0A 00 CC CC   => c => 10    => 0x000A
0012FF78    0A 00 00 00   => b => 10    => 0x0000 000A
0012FF7C    61 CC CC CC   => a => 'a'   => 0x61

通过上面机器十六进制码的情况可以得出:
1. 先定义的数据在高地址,后定义的在低地址,及从高到低进行地址分配。
2. 单个数据在内存存储方式是以一个字节为单位,从高到低存放在地址里。
3. 根据数据类型所占字节数的不同,可以看出数据按4个字节一组自动对齐。

思考:什么是变量?变量就是地址?把数据赋给变量(地址),貌似说得通。
后续:指针,数组,结构体过些时候再总结。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值