【数据存储:揭开内存中数据存储的神秘面纱】(下)

简介: 【数据存储:揭开内存中数据存储的神秘面纱】

【数据存储:揭开内存中数据存储的神秘面纱】(上):https://developer.aliyun.com/article/1424721


七个小练习 - 巩固知识


demo1


#include <stdio.h>
int main()
{
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;
    printf("a=%d,b=%d,c=%d", a, b, c);
    return 0;
}



demo2


#include <stdio.h>
int main()
{
    char a = -128;
    printf("%u\n", a);
    return 0;
}



demo3


#include <stdio.h>
int main()
{
    char a = 128;
    printf("%u\n", a);
    return 0;
}



demo4


#include<stdio.h>
int main()
{
  int i = -20;
  unsigned  int  j = 10;
  printf("%d\n", i + j);
  return 0;
}



demo5


#include<stdio.h>
#include<windows.h>
int main()
{
  unsigned int i;
  for (i = 9; i >= 0; i--)
  {
    printf("%u\n", i);
    Sleep(1000);
  }
  return 0;
}



demo6


#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
    int i;
    for (i = 0; i < 1000; i++)
    {
        a[i] = -1 - i;
    }
    printf("%d", strlen(a));
    return 0;
}



demo7


#include <stdio.h>
unsigned char i = 0;
int main()
{
    for (i = 0; i <= 255; i++)
    {
        printf("hello world\n");
    }
    return 0;
}



浮点型在内存中的存储


  • 常见的浮点数: 3.14159 1E10
  • 浮点数家族包括: float、double、long double 类型。
  • 浮点数表示的范围:float.h中定义



浮点数存储的例子:


#include<stdio.h>
int main()
{
  int n = 9;
  float* pFloat = (float*)&n;
  printf("n的值为:%d\n", n);
  printf("*pFloat的值为:%f\n", *pFloat);
  *pFloat = 9.0;
  printf("num的值为:%d\n", n);
  printf("*pFloat的值为:%f\n", *pFloat);
  return 0;
}


输出结果是什么呢?



Why?Why?Why?


  • num 和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大?
  • 要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法。



IEEE 754规定:



IEEE 754对有效数字M和指数E,还有一些特别规定。


  • 前面说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中xxxxxx表示小数部分。
  • IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的 xxxxxx部分。
  • 比如保存1.01的时 候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。
  • 以32位 浮点数为例,留给M只有23位, 将第一位的1舍去以后,等于可以保存24位有效数字。


至于指数E,情况就比较复杂。



指数E从内存中取出还可以再分成三种情况:


one:



再看一个加强知识理解



two:



three:



知识讲解完毕,再解释前面的题目:


相关文章
|
3月前
|
存储 小程序 编译器
【数据存储:揭开内存中数据存储的神秘面纱】(上)
【数据存储:揭开内存中数据存储的神秘面纱】
|
3月前
|
存储 程序员
【汇编】内存的读写与地址空间、寄存器及数据存储
【汇编】内存的读写与地址空间、寄存器及数据存储
153 1
【汇编】内存的读写与地址空间、寄存器及数据存储
|
4月前
|
存储 分布式计算 NoSQL
基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计
基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计
153 0
|
6月前
|
存储 编译器 C语言
内存中的数据存储(一看就“费”)
内存中的数据存储(一看就“费”)
22 0
|
11月前
|
存储 编译器 C语言
【C数据存储详解】(2)——深度剖析 浮点型数据 在内存中的存取
【C数据存储详解】(2)——深度剖析 浮点型数据 在内存中的存取
85 0
|
11月前
|
存储 小程序 编译器
【C 数据存储详解】(1)——深度剖析整形数据在内存中的存储
【C 数据存储详解】(1)——深度剖析整形数据在内存中的存储
76 0
|
存储
【数据存储】浮点型数据在内存中的存储
【数据存储】浮点型数据在内存中的存储
93 0
【数据存储】浮点型数据在内存中的存储
|
存储 编解码 算法
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
382 0
|
存储 索引 数据安全/隐私保护
|
1月前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1

热门文章

最新文章