数据的储存

简介: 数据的储存

1. 整形在内存中的存储

原码、反码、补码

整数是以二进制补码的形式在内存中储存的。

对于有符号的整型,二进制的最高位代表符号位,0代表正数,1代表负数

原码、反码、补码之间的转换

正整数:

原,反,补是一样的。

负整数:

原码符号位不变,其他位按位取反得到反码,

反码加1变成补码.


2.类型转换

1.隐式类型转换

凡是低于int类型的,在进行运算时都要转换为int类型。这叫做整型提升

需要转换的类型

char

unsigned char

signed char

short

unsigned short

在c语言的标准中,并没有规定char是有符号的整型还是无符号的整型,完全取决你的编译器

当char表示有符号的整型是时,它所表示数值的范围为==-128~127==

当它是无符号的整型的时候,它所表示数值的范围为0~255

这就是有符号char从-128~127之间形成的一个圆环,当127+1之后会变成-128

short是有符号的类型,它和unsigned short 一样

看下面的代码,助你理解

int main()
{
  char a = 0xb2;
  整型提升为0xffffffb2
  short b = 0xb200;
  整型提升为0xffffb200
  int c = 0xb2000000;
  不需要提升
  if (a == 0xb2)
    printf("a\n");
  if (b == 0xb200)
    printf("b\n");
  if (c == 0xb2000000)
    printf("c\n");
  return 0;
}

2.算术转换

在几个数在一起进行运算时,如果这几个数的类型不一样,就需要变成相同的类型进行运行,这就是普通的算术转换。

这几个类型从高到低排的序

long double

double

float

unsigned long int

long int

unsigned int

int

算术转换要有意义,高精度转换为低精度的时候会造成部分数据的缺失


3. 大小端字节序介绍及判断

注意:是以字节的大小储存的

大端字节序储存:数据的低位存在地址高的地方,数据的高位储存在地址低的地方.

小端字节序储存:数据的低位存在地址低的地方,数据的高位储存在地址高的地方.

请你编程实现:判断你的机器是哪种储存方式

int panduan()
{
    int i = 1;
    return *(char*)&i;
}
int main()
{
    int ret=panduan();
    if (ret == 1)
        printf("小端\n");
    else
        printf("大端\n");
    return 0;
}

4. 浮点型在内存中的存储解析

浮点型在内存中的储存与整型是完全不一样的

对于一个32位浮点数,第一位表示符号位(用S表示),后面的8位表示指数位(用E表示),剩下的位表示有效位(用M表示)

S:0表示正数,-1表示负数。

E:指数加上127位=为它的储存数,并且这8位表示的是无符号的数

M:它的范围在1~2之间,储存的时候不必要储存1,储存小数点后面的

例如:

  float i=6.5;
  二进制为110.1   1.101 *2^2
  s为0
  E为2+127=129
  M为101   后面位用0进行填充
  0 10000001 10100000000000000000000
  16进制进行表示
  0x40d00000

我们来看看计算机运行的结果

相信大家应该明白了吧!

这里有几个注意的地方:

1. 当E全部为全0时,指数位为1-127(1-1023(这是64位的时候)) ,有效位M不需要再加上1,这个一个非常接近±0的数。

2. 当E全部为全1时,这是一个非常大的数,±无穷。

除了这个两个注意的地方为,怎么存进去的就怎么取出来。

对与64位的浮点型,符号位后面的11位表示指数位,加上1023,其余的和32位浮点型的描述差不多.


相关文章
|
存储 算法 调度
分页储存管理.分段储存管理.虚拟储存管理
分页储存管理和分段储存管理是操作系统中常用的两种内存管理方式。 1. 分页储存管理: - 基本原理:将物理内存和逻辑内存划分为固定大小的页面和页面框,使得逻辑地址空间和物理地址空间可以对应起来。进程的逻辑地址空间被划分为多个固定大小的页面,每个页面与一个物理内存页面框对应。通过页表将逻辑地址映射到物理地址,实现地址转换。 - 优点:简单、灵活,能够提供较大的逻辑地址空间,适用于多道程序设计和虚拟内存管理。 - 缺点:存在内部碎片,会造成一定的存储空间浪费。 2. 分段储存管理: - 基本原理:将进程的逻辑地址空间划分为若干个逻辑段,每个逻辑段代表一个逻辑单位,如代码
256 0
|
4月前
|
存储 Kubernetes 测试技术
在k8s中,有哪些存储?
在k8s中,有哪些存储?
|
6月前
|
存储 C语言
数据在内存中的储存
数据在内存中的储存
38 3
|
7月前
|
存储
数据的存储
数据的存储
|
存储
【数据的存储】
【数据的存储】
86 0
|
存储 小程序 编译器
数据的存储(上)
数据的存储(上)
|
存储
数据的存储(下)
数据的存储(下)
|
存储 缓存 固态存储
一文看懂存储
一文看懂存储
244 1
|
存储 SQL NoSQL
存储的未来
存储的未来
124 1
|
存储 缓存 前端开发
前端本地储存
前端本地储存
146 0