回 帖 发 新 帖 刷新版面

主题:一个有趣的问题

类型说明符为int,在内存中占2个字节,其取值为基本整常数。

有没有人知道int,在内存中怎么分布的??

回复列表 (共9个回复)

沙发

我个人认为,内存的低位空间将存放int的低位数据
简单说就是低位存低位,高位存高位

板凳

我的看法是:不同的语言不一样

3 楼


学习了计算机组成原理就知道了,我觉得也是低位存低位高位存高位。

4 楼

学过汇编的就知道是低位放低位,高位放高位,

5 楼

低位在前,x86的CPU,另外一种,高位在前

全世界就这两种,和语言没关系,你可以用一个共用体测试一下~~

6 楼

c语言中的int分布应是上一位那样讲的。

7 楼

内存分配有 little-endian 和 big-endian两种方式!
little endian则是低地址存放最低有效字节(LSB)
big endian是指低地址存放最高有效字节(MSB)

Little Endian 

低地址 ----->高地址 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| 78 | 56 | 34 | 12 | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 

Big Endian 

低地址 ----->高地址 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| 12 | 34 | 56 | 78 | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 


通常little-endian比较常用,也就是通常C中所用的。

8 楼

我这个菜鸟献上我的程序,一看便知!
#include<stdio.h>
int main()
{
 union abc
 {
  int a;
  char b[4];
 }ad;
 ad.a=1;
 printf("%d\t%d\t%d\t%d\n",ad.b[0],ad.b[1],ad.b[2],ad.b[3]);
 printf("%d %d %d %d",&ad.b[0],&ad.b[1],&ad.b[2],&ad.b[3]);
 scanf("%*c");
}

9 楼

int b=1234
char *p=b;
cout<<p<<endl<<p++;
可能语法上有问题,不过是个思路

我来回复

您尚未登录,请登录后再回复。点此登录或注册