| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3083 人关注过本帖
标题:计算机在内存中按什么顺序储存数据
只看楼主 加入收藏
Zzqaz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2017-10-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:10 
计算机在内存中按什么顺序储存数据
例如 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
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
1、搜索“大小端模式”有不少相关信息。
2、给你的测试代码看看,比对一下结果。
2017-10-06 15:16
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
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
实际应用最好不要这样另类,不好读、易误解。
C有默认强制转换的说法, unsigned a=-1 写成unsigned a=(unsigned)-1 应该会易读些。
"%d"格式就是强制成有符号整数格式。
2017-10-07 10:15
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4262
注 册:2007-12-27
收藏
得分:0 
普遍的准则其实你早就知道,只是没有深入理解:
计算机是以二进制进行存储和处理的,至于你把一串二进制理解为int,float,unsigned,还是某个声音,几个像素点,那都是你自己的事。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-07 10:37
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4262
注 册:2007-12-27
收藏
得分:0 
要转换思路,站在那串二进制数的角度去考虑问题,你就会发现,原来那些外在的东西就和天上的浮云一样。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-07 10:39
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1692
专家分:4262
注 册:2007-12-27
收藏
得分:5 
或者这么说,
1


one
这些东西的互相转换需要一套复杂的规则么?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2017-10-07 10:42
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
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:5 
回复 8楼 Zzqaz
#include <stdio.h>
main()
{
    int d = -1011156284;
    printf("%.*s\n", 4, &d);
}
2017-10-07 21:28
快速回复:计算机在内存中按什么顺序储存数据
数据加载中...
 
   



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

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