A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-2-26 23:35  /  1251 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

仁兄们,偶遇到个小问题顿时蒙了 ,这个问题不常用 ,但是就是想知道,菜鸟一枚!毕老师说6这个整数其实是占了4个字节,它在内存里是00000000   00000000   00000000   00000110 这个样子的 ,我的问题是6为什么是占了4个字节呢? 是规定吗? 只要是整数在内存里边都是4个字节?
求解围,谢谢!
  




评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

7 个回复

倒序浏览
我的问题是6为什么是占了4个字节呢? 是规定吗? 只要是整数在内存里边都是4个字节?
==> 32位上一个整数就是占4个字节,这个是必须的,硬件决定的。32位机器上 整数分短整型2个字节 整形4个字节 长整形8个字节。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
只要是int类型的数据,占用内存都是四个字节,就好比两个同样大的盆,一个不装水另一个装满水,但他们占用的地方还是一样大的
分享下上次看到的一个笑话  :  
一晚下班回家,一民警迎面巡逻而来。突然对我大喊:站住! 民警:int类型占几个字节?我:4个。 民警:你可以走了。 我感到很诧异。 我:为什么问这样的问题? 民警:深夜还在街上走,幸苦又寒酸的样子,不是小偷就是程序员...

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
整型有两种。32位机上是4个字节。16位机上上2个字节。现在我们的机器大都是4个字节

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
不是这样的, 因为6默认为int类型, 只要是int在内存中就占了4个字节.
基本数据类型中:整数部分
byte:1个字节
shout:2个字节
int:  4个字节.
long:8个字节
小数:
floult:4个字节
double:8个字节
字符:
char:2个字节

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
        涉及到计算机存取时间和空间的问题吧,记得有个术语叫数据按边界对齐。     
        先看内存空间按什么划分(一般都是按字节,即Byte,占8位,也有按双字节的......),本来对数据的访问可以在任何地址,但实际上很纠结,如果没有一定的规律,访问数据将会很耗费时间,总不可能每访问一次数据就把所有的内存区域遍历一遍,所以就需要一定的规则,正如楼上列举的类型。
        数据6按二进制的话其实3bit就够了,计算机内存里按字节编址是8bit一个地址,在这个地址的8位中存2-3个数据,查找使用数据的确可以实现,还节省了一倍以上的空间,但却浪费了时间,因为你的查找算法将会十分复杂,如果数据一多且大小不一会更加困难,所以把int类型定义为4个字节,查找使用数据的时候从时间和算法上来就很容易实现。把每种类型的数据占的位置固定了,虽然空间上有一定的浪费,但查找起来很容易,只需要一个基值加上一个偏移量即可(和操作数组是同一个原理),在存取效率上带来极大的提升,你可以想象如果你定义一个一维数组,而你存放的一个数据占据两个或两个以上的元素位置,又或者在数组中一个元素位置你存放了多个数据。当你需要找固定数据的时候是很困难的,按边界对齐就是达到时间和空间的平衡吧。
        说穿了就一个比喻,一个门牌号(地址)一间房子(规定了的空间大小),房子有大有小(byte,int,char......),一间房子只能住一个人(一种类型的数据),总不能你的头在一间房子而脚在另一间房子,那样找你要找两次;或者是三个人挤一间房子(这三个人在房子里有各自的位置),你找一个人要先找到门牌号,还要去判断你找的那个人在这间房子里的哪个位置。
        希望这个回答对楼主有用。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
还有个问题,就是int类型占4字节不是硬件决定的,而是编译器决定的,硬件有16位,32位,64位,硬件的位数表示的只是数据总线的一个周期能够传输的数据位数。
主要还是看计算机是是否按字节编址,还是按其他方式编址,如果编译器如果定义一个int类型的数据是4个字节,那么按字节编址的计算机(一个地址对应一个字节,8位)就是连续4个地址的空间来存储一个int类型数据;如果按双字节编址的计算机(一个地址对应两个字节,16位)就是用连续的2个地址来存储一个int类型数据;依此类推。
回复 使用道具 举报
Silvester 发表于 2014-2-27 02:02
涉及到计算机存取时间和空间的问题吧,记得有个术语叫数据按边界对齐。     
        先看内存空间 ...

谢谢啊 说了好多 辛苦了啊  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马