| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3091 人关注过本帖
标题:计算机在内存中按什么顺序储存数据
取消只看楼主 加入收藏
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
计算机在内存中按什么顺序储存数据
例如 int a= 0x12345678.当我查看内存中的相应地址的时候,发现其相邻的四个字节内分别是 0x78 0x56 0x34 0x12,能否就此说明一些什么规律呢?
另外,对于unsigned= -1 当输出时指示符为%d时会输出 -1 ,当指示符为 %ud 时会输出2^32.
      对于int=2^31 当输出时指示符为%d时会输出 -2^31,当指示符为 %ud 时会输出2^31.
能否就此说明数据在转换为二进制存储中的一些规律呢?(也就是说数据转换为二进制到底是根据我的输入值还是根据变量声明的类型呢)

[此贴子已经被作者于2017-10-6 11:16编辑过]

搜索更多相关主题的帖子: 计算机 内存 顺序 数据 输出 
2017-10-06 11:01
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
收藏
得分:0 
回复 2楼 吹水佬
感谢您对第一个问题的回答:)
对第二个问题我表述不清楚,是想问常量在声明中使用的数据类型如果和常量本身的类型不符,那是不是会以声明类型为准?如果是以声明类型为准,不同的类型之间的转换会以什么规律进行?
例如
图片附件: 游客没有浏览图片的权限,请 登录注册

其中我对int 赋值小数,对float赋值整数,对unsigned赋值负数,对int赋值越界的整数等等,初步发现int会舍弃小数,float会补充小数,unsigned会以补码强存,越界冲入符号位等等。还有没有其他的规律或者是更普遍性的准则?
这应该可以作为是数据写入成二进制时候的一些准则(类型不对应的时候)。
在printf输出的时候,能否理解为对这些二进制按照相应准则的解读?
例如 unsigned a=-1,在存储时看到  a是一个大的正数,而 printf("%d",a);时输出的a=-1.
2017-10-07 08:22
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
收藏
得分:0 
回复 4楼 吹水佬
感谢您的提醒。初学的我就是乱搞点实验:)
看了关于强制转换和自动转换的内容,我现在这样认为: 基本数据类型就是整数型和浮点型两类,在赋值操作中计算机就直接按照其相应的规则(整数的补码,小数的浮点)把数字转换成二进制数存在内存里面,而对于变量类型的声明只不过影响他的解读方式而已(就像楼下所说,本质上都是二维码,只不过解读方式不同)。
而我之前的误解则来自于对自动转换这一机制的误解,我认为的是例如 unsigned = -1 ;这样的赋值就一定要将 -1 按照 unsigned 的标准存起来,然而并没有相应的标准,因而我感到困惑。
不知道我这样的体会是不是正确?

2017-10-07 19:31
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
收藏
得分:0 
回复 7楼 forever74
谢谢您的指导。
我在学习数据类型以及格式化输入输出的时候就感觉到太多的规则,我希望找到他们的内在联系。看了您的回复,我有以下思考
数据以他本身的形式所对应的法则存储成二进制码,在赋值、输出等操作的情况下,这些二进制码会被以某种法则解读。
在法则一致时就正好,不一致的时候则会以升级或者降级的方式来达到一致。而这些升级降级的方式,就是所谓的自动转换规则。
这样想正确吗?

2017-10-07 19:38
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
收藏
得分:0 
回复 10楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册

谢谢您的回复


2017-10-08 08:09
快速回复:计算机在内存中按什么顺序储存数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069864 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved