类型,不光出现在定义变量的时候,还有使用变量的时候。
创建变量的实质是在内存上为其开辟一块空间,空间大小由变量类型决定。那么数据在内存中到底是如何存储的呢? 一、整型:我们直接看程序吧: 结果是:
按照一般的想法,应该是12345678才对啊,怎么按照地址顺序成了78563412了呢?这就涉及到整型数据在计算机的存储。分为小端序和大端序。 在32位系统中,一个int为四个字节,32位二进制,数据在内存中以补码的形式存储。 ==》正数的补码是本身 ==》负数的补码等于它取反加1 我使用的Dev-C++是一个小端机,内存显示是从低地址开始读的,说到小端机,一定会有人问是不是还有大端机? 下面我们一起来看看大小端的区别: 大端机:数据低地址存放高字节,高地址存放低字节 例:C51单片机 小端机:数据低地址存放低字节,高地址存放高字节 例:X86 一个整型的占4个字节 它的地址是用最低位来表示。
!!几句代码查看什么端: int a = 0x12345678; short *p = (short*)&a; printf("%#x\n", *p);//小端打印为0x5678,虽然存是低地址存低字节,但取不一样。所以是0x5678。 一个地址占8位,16进制转换为2进制占2个。所以78在一起,56在一起。
二、浮点型还是直接上例子: 结果是这样:
我们把它转换成二进制看看(小端序):0100 0011 0011 0010 0010 0000 0000 0000,这是一件十分头大的事,看起来就像天书一样。 现在大致说一下:我们始终记得,计算机只认识二进制,在计算机中,不管是什么类型的数据。最终只会变成二进制,不同的数据类型可能存的值一样,只是取得方式不一样。而浮点数在计算机是这样存储的: //(double)1位符号位,11位指数位,52位尾数位。// 如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是我们知道,科学计数法中的E是可以出现负数的,所以,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127; 将十进制178.125表示成机器内的32位的二进制形式--> 1:将178.125表示成二进制数: (178.125)(十进制数) = (10110010.001)(二进制形式); 2:将二进制形式的浮点实数转化为规格化的形式: 10110010.001 = 1.0110010001 * 2 ^ 7 (小数点向左移7二进制位可得) 3:符号位(1位): 该数为正数,故第31位为0,占一个二进制位. 4:阶码(8位): 指数为7,故其阶码为127 + 7 = 134 = (10000110)(二进制),占从第30到第23共8个二进制位. 5:尾数(32 - 8 - 1 = 23位): 为小数点后的部分, 即0110010001.因为尾数共23个二进制位,在后面补13个0,即01100100010000000000000 6:178.125在内存中的实际表示方式为: 0 10000110 01100100010000000000000,这是不是我们在程序中看到的场景呢! |
/1
|手机版|免责声明|本站介绍|工控课堂
( 沪ICP备20008691号-1 )
GMT+8, 2025-12-23 00:20 , Processed in 0.074505 second(s), 23 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.