当前位置: 首页 > news >正文

筑基七层 —— 数据在内存中的存储?拿来吧你

目录

零:移步

一.修炼必备

二.问题思考

三.整型在内存中的存储

三.大端字节序和小端字节序

四.浮点数在内存中的存储


零:移步

  CSDN由于我的排版不怎么好看,我的有道云笔记相当的美观,请移步至有道云笔记

一.修炼必备

 1.入门必备:VS2019社区版,下载地址:Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com)

 2.趁手武器:印象笔记/有道云笔记

 3.修炼秘籍:牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

 4.雷劫必备:leetcode 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

 注:遇到瓶颈怎么办?百度百科_全球领先的中文百科全书 (baidu.com)

二.问题思考

 1.C语言数据的类型?

 2.整数在计算机中二进制的表示形式有几种?正整数和负整数相同的吗?

 3.整数在内存中的存放的是什么?怎么验证是这样存放的?

 4.为什么计算机中存放的是补码?

 5.什么是字节序?

 6.数据的字节序是在内存中怎么存储的?

 7.如何判断一个数据的字节序是大端字节序还是小端字节序?

 8.浮点数在内存中的存储和整数的存储是一样的吗?

 9.浮点数的存储规则

三.整型在内存中的存储

 1.C语言数据的类型?

1)整型:char,short,int,long,long long

2)浮点型:float,double

3)构造类型:struct,union

4)指针类型:int*,char*,double*等

5)空类型:void(常用于函数的返回类型,指针类型,函数的参数)

 2.如何查看整数类型的值范围?

    ——在limits.h头文件中查看

 3.整数在计算机中二进制的表示形式有几种?正整数和负整数相同的吗?

  1)整数在计算机中的表示形式有:原码、反码、补码

  2)正整数的原码、反码、补码均相同

  3)负整数的原码、反码、补码的规则

原码:把整数直接按照二进制进行转化

反码:原码的符号位不变,其他位按位取反

补码:反码 + 1

#include <stdio.h>//原码、反码、补码的转化规则
int main()
{//正整数的原码、反码、补码相同int num1 = 5;//00000000 00000000 00000000 00000101  num1的补码//负整数的原码、反码、补码转化int num2 = -5;//10000000 00000000 00000000 00000101  原码//(原码符号位不变,其他位取反)//11111111 11111111 11111111 11111010  反码//(反码+1)//11111111 11111111 11111111 11111011  补码return 0;
}

 4.如何证明整型在内存中存储的是补码?

    ——使用负数证明

  1)打印出负数的十六进制形式(十六进制是无符号的打印)

#include <stdio.h>//证明整型在内存中存储的是补码
int main()
{int num1 = 1;//00000000 00000000 00000000 00000001   1的补码int num2 = -1;//11111111 11111111 11111111 11111111  -1的补码//注:每四个2进制位可以组成一个十六进制:ffffffprintf("%x\n", num1);//1printf("%x\n", num2);//fffffffreturn 0;
}

  运行结果如图:

  2)调试查看负数在内存中的存储形式 

 5.为什么计算机中存放的是补码? 

1)方便运算:省去了计算机判断符号位或判断+/-运算的麻烦,采用补码后,不管是加法还是减法均是使用加法进行运算(CPU只有加法器)

2)更加标准:保证了系统的编码的一致性和连续性,也同时避免了+/-0的麻烦 

 6.practice

  case 1:思考并分析

#include <stdio.h>int main()
{char a = -1;//默认是有符号数//10000001 原码//11111110 反码//11111111 补码//11111111 11111111 11111111 11111111 整型提升//11111111 截取(补码)//10000001 原码(-1)signed char b = -1;//b 和 a一样unsigned char c = -1;//10000001 原码//11111110 反码//11111111 补码//11111111 11111111 11111111 11111111 整型提升//11111111 截取 --无符号数:255printf("a=%d,b=%d,c=%d\n", a, b, c);//-1 -1,255return 0;
}

  运行结果如图:

  case 2:思考并分析 

#include <stdio.h>int main()
{char a = -128;//10000000 -- 补码//因为是无符号整型打印,需要整型提升//11111111 11111111 11111111 10000000  -- 4294967168(结果)printf("%u\n", a);//4294967168return 0;
}

  运行结果如图:

  case 3:思考并分析

#include <stdio.h>int main()
{char a = 128;//10000000//11111111 11111111 11111111 10000000 整型提升//-- 4294967168(结果)printf("%u\n", a);//4294967168return 0;
}

  运行结果如图:

  case 4:思考并分析 

#include <stdio.h>int main()
{int a = -20;//10000000 00000000 00000000 00010100 原码//11111111 11111111 11111111 11101011 反码//11111111 11111111 11111111 11101100 补码unsigned int b = 10;//11111111 11111111 11111111 11101100 补码(-20)//00000000 00000000 00000000 00001010 补码 (10)//11111111 11111111 11111111 11110110 运算结果(补码)//11111111 11111111 11111111 11110101//10000000 00000000 00000000 00001010  -10:结果printf("%d\n", a + b);return 0;
}

  运行结果如图:

  case 5:思考并分析 

#include <stdio.h>int main()
{unsigned int i;//为什么进行了死循环?//i是无符号整型//i = 0;执行i--的时候//00000000 00000000 00000000 00000000  0的补码//11111111 11111111 11111111 11111111  -1的补码(无符号数,最高位没有正负之分)//4294967295(-1的时候的值)for (i = 9; i >= 0; i--){printf("%u\n", i);}return 0;
}

  运行结果如图:

  case 6:思考并分析 

#include <stdio.h>
#include <string.h>int main()
{char a[1000];int i;for (i = 0; i < 1000; i++){a[i] = -1 - i;//11111111  -1的补码//11111110  -2的补码//11111101  -3的补码//……//10000000  -128的补码//01111111   127的补码//……//00000000   0的补码('\0')}printf("%d\n", strlen(a));//255return 0;
}

  一图了解char的范围:

  运行结果如图:

  case 7:思考并分析

#include <stdio.h>unsigned char i;
int main()
{for (i = 0; i <= 255; i++){printf("hehe\n");//11111111 i为255的时候//00000000 255+1后的值//所以为死循环}return 0;
}

  运行结果如图:

三.大端字节序和小端字节序

 1.什么是字节序?

    ——字节序又称为端序或尾序,指计算机内存中多字节数据在内存中的排列顺序

 2.数据的字节序是在内存中怎么存储的?

    ——浮点数和整数的字节序都有大端和小端两种字节序

1)小端字节序

        ——数据的低位字节存储在内存的低地址处,高位字节存储在内存的高地址处

2)大端字节序

        ——数据的低位字节存储在内存的高地址处,高位字节存储在内存的低地址处

 3.如何判断一个数据的字节序是大端字节序还是小端字节序?

    ——内存中查看该数据的存储形式,看低位存放在内存中的位置

  图解:

  代码解释:

#include <stdio.h>int main()
{int num = 0x11223344;float data = 5.5;//101.1//01000000101100000000000000000000//40b00000:十六进制形式return 0;
}

  小端字节序在内存中的图解:

  大端字节序在内存中的图解: 

 4.一道笔试题加强巩固

    ——请判断一个机器是大端字节序还是小端字节序

思路分析:我们只需要判断取出1的最低位即可,如果是0,则是大端存储序列,如果是1,则是小端字节序

#include <stdio.h>//判断当前机器是大端还是小端字节序
int main()
{int a = 1;char* p = (char*)&a;if (*p == 1){printf("小端字节序\n");}else{printf("大端字节序\n");}return 0;
}

   代码是写出来了,但是这样写是不是有点太low了,我们换种方式

#include <stdio.h>//判断当前机器是大端还是小端字节序
int judge(int a)
{char* p = (char*)&a;return *p;//如果小端,直接返回1,大端返回0
}int main()
{int a = 1;if (judge(a) == 1){printf("小端字节序\n");}else{printf("大端字节序\n");}return 0;
}

  运行结果如图:

 

四.浮点数在内存中的存储

 1.怎么查看浮点数的值范围?

    ——在float.h头文件中查看

 

 2.浮点数的存储规则

  1)浮点数进行存储的形式:(-1)^S * M * 2^E;

    ——解释:S表示符号位,M表示有效数字:1

  2)在IEEE的规定下,最高位的1位S表示符号位,接下来的八位表示指数E,剩下的23位表示有效数字M

   float图解:

   double图解:

  3)由图知:float的指数位有8位,double的指数位有11位,float的M有23位,double的M有52位

  4)IEEE对M和E还有一些特别的规定

   i.因为1

   ii.指数E是一个无符号整数(unsigned int)

a.float的话,E的值在0~255之间;double的话,E的值在0~2047之间

b.注意,科学计数法中的E是可以是为负数的,所以我们在计算E的时候,应该加上一个中间值,float类型+127,double类型+1023

   iii.E从内存中取出的三种情况

a.E不为全0或全1

        ——使用E转化的十进制值减去127/1023得到真实值,在给有效数字加上小数点前面的1(常用)

b.E全为0

        ——E的值是1-127或1-1023,得到真实值,这个时候我们不需要在加上小数点前面的1了,这样做是为了表示正负0,以及接近0的很小的数值

c.E全为1

        ——这时,如果有效数字全为0,表示±无穷大(正负取决于符号位s)

 3.practice

  case 1:分析解释下面代码 

#include <stdio.h>int main()
{int num = 9;float* p = (float*)&num;printf("%d\n", num);//9printf("%f\n", *p);//0.000000//分析为什么是0.000000//00000000 00000000 00000000 00001001  9的补码//浮点数中看到的形式//0 00000000 00000000000000000001001//相当于0.00000000000000000001001 * (1 - 2^-126)//这个数非常小,而浮点数默认取小数点后6位,所以为0.000000*p = 9.0;//1001.0//1.001 * 2^3//S = 0,E = 2, M = 1.001//可以写出*p的的二进制序列//0 10000010 00100000000000000000000 *p的二进制序列//化为整数:1091567616printf("%d\n", num);//1091567616printf("%f\n", *p);//9.000000return 0;
}

  运行结果如图:

  case 2:分析并解释

#include <stdio.h>int main()
{float num = 5.5;//101.1 --> 1.011//S = 0,E = 2, M = 1.011 --> 得出二进制序列//0 10000001 01100000000000000000000  num的二进制序列int* p = (int*)&num;//01000000101100000000000000000000  结果:1085276160printf("%f\n", num);//5.500000printf("%d\n", *p);//1085276160*p = 5;//01000000 10110000 00000000 00000000序列变为://00000000 00000000 00000000 00000101  5//转化为float类型//0 00000000 00000000000000000000101  //结果:0.00000000000000000000101 * 2 ^ (-126);(极小的数)//转为float即为0.000000printf("%f\n", num);//0.000000printf("%d\n", *p);//5return 0;
}

  运行结果如图:

  !!!恭喜你,突破至筑基七层!!!

相关文章:

筑基七层 —— 数据在内存中的存储?拿来吧你

目录 零&#xff1a;移步 一.修炼必备 二.问题思考 三.整型在内存中的存储 三.大端字节序和小端字节序 四.浮点数在内存中的存储 零&#xff1a;移步 CSDN由于我的排版不怎么好看&#xff0c;我的有道云笔记相当的美观&#xff0c;请移步至有道云笔记 一.修炼必备 1.入门…...

Typecho COS插件实现网站静态资源存储到COS,降低本地存储负载

Typecho 简介Typecho 是一个简单、强大的轻量级开源博客平台&#xff0c;用于建立个人独立博客。它具有高效的性能&#xff0c;支持多种文件格式&#xff0c;并具有对设备的响应式适配功能。Typecho 相对于其他 CMS 还有一些特殊优势&#xff1a;包括可扩展性、不同数据库之间的…...

2月23号作业

题目&#xff1a;题目一&#xff1a;通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作--->上传CSDN 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输…...

因果推断方法(一)合成控制

知道的跳过下面的简单介绍&#xff1a; 就是比如广告主投放了10w元&#xff0c;那么他的收益怎么算&#xff1f;哪些订单就是广告带来的&#xff0c;哪些是不放广告也会购买&#xff1f; 合成控制法是目前我实际应用发现最好用的。置信度高&#xff0c;且容易理解。 简单讲下思…...

数据结构第12周 :( 有向无环图的拓扑排序 + 拓扑排序和关键路径 + 确定比赛名次 + 割点 )

目录有向无环图的拓扑排序拓扑排序和关键路径确定比赛名次割点有向无环图的拓扑排序 【问题描述】 由某个集合上的一个偏序得到该集合上的一个全序&#xff0c;这个操作被称为拓扑排序。偏序和全序的定义分别如下&#xff1a;若集合X上的关系R是自反的、反对称的和传递的&…...

Linux安装docker(无网)

1. 下载Docker安装包 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 如果服务器可以联网可以通过wget下载安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz2. 解压安装 tar -zxvf docker-18.06…...

解决JNI操作内核节点出现写操作失败的问题

Android 9.0下&#xff0c;因为采取了SEAndroid/SElinux的安全机制&#xff0c;即使拥有root权限&#xff0c;或者对某内核节点设置为777的权限&#xff0c;仍然无法在JNI层访问。 本文将以用户自定义的内核节点/dev/wf_bt为例&#xff0c;手把手教会读者如何在JNI层获得对该节…...

纵然是在产业互联网的时代业已来临的大背景下,人们对于它的认识依然是短浅的

纵然是在产业互联网的时代业已来临的大背景下&#xff0c;人们对于它的认识依然是短浅的。这样一种认识的最为直接的结果&#xff0c;便是我们看到了各式各样的产业互联网平台的出现。如果一定要找到这些互联网平台的特点的话&#xff0c;以产业端为出发点&#xff0c;无疑是它…...

干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)

大趋势&#xff1a;全链路异步化&#xff0c;性能提升10倍 随着业务的发展&#xff0c;微服务应用的流量越来越大&#xff0c;使用到的资源也越来越多。 在微服务架构下&#xff0c;大量的应用都是 SpringCloud 分布式架构&#xff0c;这种架构总体上是全链路同步模式。 全链…...

ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境

ur3robotiq ft sensorrobotiq 2f 140realsense d435i配置rviz&#xff0c;gazebo仿真环境 搭建环境&#xff1a; ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 reasense&#xff1a; D435i 通过下面几篇博客配置好了ur3、力传…...

ASP.NET Core MVC 项目 AOP之Authorization

目录 一&#xff1a;说明 二&#xff1a;传统鉴权授权的基本配置 三 &#xff1a;角色配置说明 四&#xff1a;策略鉴权授权 五&#xff1a;策略鉴权授权Requirement扩展 总结 一&#xff1a;说明 鉴权&#xff1a;是指验证你是否登录&#xff0c;你登录后的身份是什么。…...

智能新冠疫苗接种助手管理系统

项目背景介绍 近几年来,网络事业&#xff0c;特别是Internet发展速度之快是任何人都始料不及的。目前&#xff0c;由于Internet表现出来的便捷&#xff0c;快速等诸多优势&#xff0c;已经使它成为社会各行各业&#xff0c;甚至是平民大众工作&#xff0c;生活不可缺少的一个重…...

Python+Selenium4元素交互1_web自动化(5)

目录 0. 上节回顾 1. 内置的等待条件 2. 元素属性 1. Python对象属性 2. HTML元素属性 3. 元素的交互 1. 输入框 2. 按钮 3. 单选框和复选框 0. 上节回顾 DEBUG的方式&#xff1a;JS断点 Python断点编程语言提供的等待方式&#xff1a;sleepselenium提供的等待方式&…...

2023双非计算机硕士应战秋招算法岗之深度学习基础知识

word版资料自取链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1H5ZMcUq-V7fxFxb5ObiktQ 提取码&#xff1a;kadm 卷积层 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播&#xff0c;所以说全连接神经网络可以存储非常多的参数&#xff0c;…...

Python opencv进行矩形识别

Python opencv进行矩形识别 图像识别中,圆形和矩形识别是最常用的两种,上一篇讲解了圆形识别,本例讲解矩形识别,最后的结果是可以识别出圆心,4个顶点,如下图: 左边是原始图像,右边是识别结果,在我i5 10400的CPU上,执行时间不到8ms。 识别出结果后,计算任意3个顶点…...

网安入门必备的12个kali Linux工具

kali Linux工具帮你评估 Web 服务器的安全性&#xff0c;并帮助你执行黑客渗透测试。 注意&#xff1a;这里不是所提及的所有工具都是开源的。 1. Nmap Nmap &#xff08; 网络映射器 &#xff09;是一款用于 网络发现 和 安全审计 的 网络安全 工具. 主机发现,端口扫描,版本…...

【测试面试】头条大厂,测试开发岗真实一面。你能抵得住吗?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小吴&#xff1a; 现…...

分享app的测试技巧

前言 今天笔者想和大家来唠唠app测试&#xff0c;现在的app有非常的多&#xff0c;这些app都是需要经过测试之后才能发布到应用市场中&#xff0c;app已经成为了我们日常生活中不可或缺的一部分了&#xff0c;但它的功能必须强大&#xff0c;才能受到消费者的重视&#xff0c;…...

HTML 基础【快速掌握知识点】

目录 一、什么是HTML&#xff1f; 二、HTML的发展史 三、HTML5的优势 四、HTML基本结构 五、DOCTYPE声明 六、title标签 七、meta标签 八、标题标签 九、段落标签 十、换行标签 十一、水平线标签 十二、字体样式标签 十三、特殊符号 十四、图像标签 十五、链接标…...

SpringBoot入门(二)

这里写目录标题一、SpringBoot整合Junit1.1 搭建SpringBoot工程1.2 引入starter-test起步依赖1.3 编写类1.4 测试二、SpringBoot整合mybatis2.1 搭建SpringBoot工程2.2 引入mybatis起步依赖&#xff0c;添加驱动2.3 编写DataSource和MyBatis相关配置2.4 定义表和实体类2.5 编写…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...