深度剖析数据在内存中的存储

本文深入探讨了C语言中的数据类型,包括char、short、int、long、long long、float和double等,以及它们的有符号和无符号变体。此外,详细阐述了整数在内存中的存储方式,如原码、反码和补码,并介绍了大小端字节序的概念和判断方法。文章还通过实例展示了不同数据类型的内存表示和运算过程,帮助理解计算机内部如何存储和处理数据。
摘要由CSDN通过智能技术生成

本章重点:

  1. 数据类型详细介绍

  2. 整形在内存中的存储:原码、反码、补码

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

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

1.数据类型介绍

char        //字符数据类型
short       //短整型
int         //整形
long        //长整型
long long   //更长的整形
float       //单精度浮点数
double      //双精度浮点数
//C语言有没有字符串类型?

类型的意义:

  1. 使用这个类型开辟空间的大小(大小决定了使用的范围)。

  2. 如何看内存空间的视角。

1.1 类型的基本归类:

整形家族:(char 虽然是字符类型,但是字符类型存储的时候,存储的字符是ascii码值,ascii值是整数)

char
    unsigned char
    signed char
//char c1;//char到底是有符号?还是无符号?-->不确定,是取决于编译器的实现。
//signed char c2;
//unsigned char c3;
        
short
    unsigned short [int]
    signed short [int]
//short s1;//有符号
//short 等价于 signed short
//signed short s2;//有符号
//unsigned short s3;//无符号的short
//有正负数据可以存放在有符号的变量中
//只有正数的数据可以存放在无符号的变量中
//int可省略     
    
int
    unsigned int
    signed int
//int n1;//n1就是有符号的,int等价于signed int
//signed int n2;
//unsigned int n3;
    
    
long
    unsigned long [int]
    signed long [int]
//long n = 0;long 等价于signed long 
//signed long n2 = 0;
//unsigned long n3;
​

浮点型家族:

float 
double
//long double

构造类型:(自定义类型)

>数组类型
//int arr[10];//arr的类型是:int [10]
//int arr2[4];//int [4]
//char arr3[4];//char [4]
//int a[]={0,0,0};//int [3]
>结构体类型 struct
>枚举类型 enum
>联合类型 union

指针类型:

int *pi;
char *pc;
float* pf;
void* pv;
//指针变量是用来存放地址!

空类型:

void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。

2.整形在内存中的存储

2.1 原码、反码、补码

计算机中的整数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位数值位两部分,符号位都是用0表示“正”,用1表示“负”

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//整数可以写出三种2进制表示形式:
//原码:直接将数值按照正负数的形式翻译成二进制就可以
//反码:将原码的符号位不变,其他位依次按位取反就可以得到了
//补码:将反码+1
//正整数的原码、反码、补码相同
//负数的原码、反码、补码是需要计算的
int main()
{
    int a = 10;//整型值
    //原码:00000000000000000000000000001010
    //反码:00000000000000000000000000001010
    //补码:00000000000000000000000000001010
​
    int b = -10;
    //原码:10000000000000000000000000001010
    //反码:11111111111111111111111111110101
    //补码:11111111111111111111111111110110
    //        F   F     F    F    F    F    F    6
    //0xff ff ff f6
    return 0;
 }
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    1 - 1;
    //1+(-1);
    //CPU只有加法器
    //使用补码的二进制计算
    //00000000000000000000000000000001
    //10000000000000000000000000000001
    //11111111111111111111111111111111
//   100000000000000000000000000000000
    //0
    //10000000000000000000000000000001 -1的原码
    //11111111111111111111111111111110 -1的反码
    //11111111111111111111111111111111 -1的补码
    //
    //使用原码计算是错误的
​
    return 0;
}

正在上传…
取消

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
    unsigned int ch = -10;
    //-10
    //10000000000000000000000000001010
    //11111111111111111111111111110101
    //11111111111111111111111111110110
    //
    //printf("%u\n",ch);//%u是打印无符号数,意思是你要我打印的是无符号数,不是无符号数,我也认为是无符号数。
    //printf("%d\n",ch);//%d是打印有符号数,意思是你要我打印的是有符号数,不是有符号书,我也认为是有符号数。
    return 0;
}

2.2 大小端介绍

大小端字节序存储

大端字节序存储:把一个数据低位字节处的数据存放在高地址处,把高位字节的数据放到低地址处。

小端字节序存储:把一个数据低位字节处的数据存放在低地址处,把高位字节的数据放到高地址处。

百度2015年系统工程师笔试题:

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)

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

2.3 练习

1.
//输出什么?
#include <stdio.h>
int main()
{
    char a= -1;
    //100000000000000000000000000000001
    //111111111111111111111111111111110
    //111111111111111111111111111111111
    //
    //11111111
    //111111111111111111111111111111111
    //111111111111111111111111111111110
    //100000000000000000000000000000001
    //
    signed char b=-1;
    unsigned char c=-1;
    //100000000000000000000000000000001
    //111111111111111111111111111111110
    //111111111111111111111111111111111
    //11111111 -c
    //000000000000000000000000111111111
    //
    printf("a=%d,b=%d,c=%d",a,b,c);
    //-1 -1 255
    //当我们打印a的时候,要发生整型提升
    //打印的是有符号数
    return 0; }

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值