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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rla540 中级黑马   /  2012-12-19 00:10  /  1064 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

OK 现在对函数中局部变量在内存中的排列有了个大致的认识,那么这些数据在内存中又是怎么转换得呢?正负数又是如何表示的呢?整数类型和浮点数,在内存中转换方式是一样的么?string又是怎么样的?结构体,枚举,类又是怎么样的?什么是堆,什么又是栈?哈哈脑子中是不是有好多问号?没关系,包子要一口一口的吃,水要一口一口的喝。莫急!莫急。 让我们先把有符号整数在内存中的转换搞清楚先!有符号搞明白了,无符号数也就不功自破了!
Int类型最为常用,那就拿他开刀吧(short, long int的转换方式是一样的,只是占用空间大小不一样。搞明白后,可以自己调试查看!)

int number1 = 0x12345678;
int number2 = -1;
F10

嗯,我们定义的数是0x12345678;
那内存中怎么显示的是 78 56 34 12 呢?
好,我让你写一个数:一百八十二
182
很好,完全正确。这是默认的表现方式,百位在最左边,十位在中间,个位在最右边
我现在要求你百位写在最右边,十位写在中间,个位写在最左边,怎么写?
281
嗯,又对了。那这个数还是一百八十二么?当然是喽。只是读取顺序变换了一下。如果还按照以前的方式解读,当然读取的就肯定不是我们想要的数字了
Intel Cpu是按照高地址存放高位,低地址存放低位的方式存储数据的!所以内存窗口中0x12345678显示为78 56 34 12
好存放顺序搞懂后,我们再看看,正负数又是怎么表示的。

1在内存中存储的很容易搞懂,那么为什么-1在内存中显示的是全1呢?
哈哈还是因为计算机很笨,他只会算加法不会算减法,聪明的科学家就想出了一个好办法又给这方法起了个吓人的名字“补码表示法”就是把减法转换成加法。
对于任何一个4字节数,x + x(取反) = 0xFFFFFFFF;(取反就是01 10
0xFFFFFFFF + 1 = 0(4字节空间最多只能存放32位,那相加后进得那1位放到哪里去了呢?当然是丢掉不要了!这样就得出我们想要的结果了!实现目的才是最重要的。)。所以 x + x(取反) + 1 = 0So  x的相反数就等于 x(取反) + 1 -x = x(取反) + 1;
X - X 就转换成了 X + X(取反) + 1 = 0;  减法最终于转变成了加法,哈哈。这些科学家家真是聪明。听说这个世界就是被数学家所统制的。看来是真地!
例如:
-1 = 1(取反) + 1
    那无符号呢,当然就是没有符号号位喽,所有32位都是有效数字位。所以相同位数的无符号数,表示的正数的范围要比有符号数大得多了!搞定!休息!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马