数据在底层的存储模式

2023-10-26

1、数据的存储模式

  • 大端存储模式(常见于我们的手机等)
    低地址放高数据

  • 小端存储模式(比如PC)
    低地址存放低数据

面试题:设计程序判断大小端
这里可以有两种方式:
1、写一个函数通过数据类型

int main()

{

       int a = 0x11223344;

       char*p = &a;

       printf("%x", *p);
}


2、通过联合体(联合体种的变量共用一块内存)

union Un
{
    int a;
    char ch;
}
int main()
{
union Un uu;
uu.a=0x11223344;
printf("%x",ch);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3cUoytPg-1570687707359)(en-resource://database/516:1)]

1、数据类型:对变量的划分
  • 整型提升问题
  • 无符号数和有符号数打印的区别
int main()
{
    char a=-1;
    unsigned char b=-1;
    signed char c=-1;
    printf("%d%d%d",a,b,c); //注意观察是以什么进制打印的
}

做法:

  • 在32位下
    -1的原码: 1000 0000 0000 0000 0000 0000 0000 0001
    反码: 1111 1111 1111 1111 1111 1111 1111 1110
    补码: 1111 1111 1111 1111 1111 1111 1111 1111

  • 由于是char类型,且pc是小端并且存的是补码,只存了后八位1111 1111(ff)

  • 打印的时候是%d以十进制并且是int型,故此时需要整型提升

  • 关于a:char默认是有符号,%d是以4个字节打印,所以a整型提升为 1111 1111 1111 1111 1111 1111 1111 1111,因为是补码存储的,打印出来变原码,结果仍然是-1;

  • 关于b: 无符号的char,每一位都是数值位,1111 1111(255),所以整型提升的时候直接前面补0就ok,结果是0000 0000 0000 0000 0000 0000 1111 1111,这个补码的最高位是0,是正数,因此它也是原码,就不用再转换了,直接输出255

  • 关于c可以 参见a

2、几个重要的例子
int main()
{
    unsigned int i=9;
    for(i=9;i<=0;i--)
    {
        printf("%u",i);
    }
    return 0;
}

这里会死循环,i是一个无符号的数,当小于0的时候无符号打印,i的值又会变成这种类型的最大值,因此还会进入循环。

unsigned char i;
int main()
{
    for(i=0;i<255;i++)
    {
        printf("hello word\n")
    }
    return 0;
}
int main()
{
    char a[500];
    int i;
    for(i=0;i<500;i++)
    {
        a[i]=-1-i;
    }
    printf("%d",strlen(a));//这里注意strlen在遇到\0也就是0的时候停止
    return 0;
}

在这里插入图片描述
可以看看这张图,在-128减一之后变成了127

2、浮点数在内存中的存储

754标准(只能精确保存6位,且是一个范围)

float类型 4个字节存储,遵循IEEE-754格式标准:一个浮点数有两部分组成:底数m和指数e
符号位(S):0、1
底数部分(M):使用二进制数来表示浮点数的实际值
指数部分(E): 占用8bit的二进制数,可表示数值范围为从-126到128
(因为指数可正可负,所以IEEE规定,此处算出的次方必须减去127才是真正的指数。)
科学计数法:
格式 :
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负,E指数加上127后的值得二进制数据,M为底数

eg: 17.725 在内存中得存储
首先要把17.625换算成二进制: 10001.101(注意整数部分和小数部分得转换规则)因为右移动了四位,这时候得底数和指数再将10001.101右移,直到小数点前只剩一位1.0001101*2^4

底数:因为小数点前必须为1,所以IEEE规定只记录小数点后得就好。所以此处得底数:0001101
指数:实际为4,必须加上127(转出得时候,减去127),所以为131,即 10000011,符号部分是整数,所以是0
综上,17.625存储格式为: 01000001 10001101 000000000 000000000

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMe8yRgS-1570687707365)(en-resource://database/520:1)]

注意:

  • 指数位是原来这个数再加上一个中间数127.
  • 指数位全零,则这个数认为是正负零
  • 指数位全1,则认为这个数是无穷大或者是无穷小。

这一篇后续还会完善。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据在底层的存储模式 的相关文章

  • c++网络编程3:UDP编程

    一 概念 UDP是传输层中面向无连接的协议 所以UDP丢包后是不会重传的 而且他在编程上服务端和客户端是没有区别的 有的只是 虚拟上 的服务端和客户端 他在编程的实现上也很简单 不像TCP那么复杂 二 UDP终端的编程 由于UDP在服务端和
  • 不同型号服务器esxi,如果管理多个esxi服务器

    如果管理多个esxi服务器 没有 装一个vcenter吧 可以集中管理 多台服务器之间还可以做双机热备等功能 很好用 至于注册序列号 你漫天都是 你可以把分数拉高一点 我送给你一个 哈哈 如何给esxi搭建ntp服务器 提在ESX ESXi
  • Windows系统的JDK安装与配置

    1 选择JDK版本 以在Windows 64位平台上安装JDK 8版本为例 JDK 8 Windows版官网下载地址 https www oracle com java technologies downloads java8 window
  • Redis的安装

    环境 用的Linux系统阿里云服务器 1 在redis官网下载最新稳定版的安装包 官网网址 https redis io 2 下载完的安装包通过Xftp上传到 opt目录下 3 连接上远程服务器60 205 189 176端口22 输入下面
  • 离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进

    林伟 阿里云智能研究员 阿里云智能通用计算平台MaxCompute 机器学习PAI平台技术负责人 本篇内容将从三个部分为读者讲述离线实时一体化数仓与湖仓一体 云原生大数据平台的持续演进 通过从数据湖到数仓的历史 反思为什么要做湖仓一体 以及
  • 向“全栈”进发,大型线上商城实战项目,Spring Boot + Vue 前后端分离版本的商城来了(文末有视频)

    新蜂商城 Vue 版本 它来了 文末有视频 如上图所示 新蜂商城 Vue 版本已经开发完成 这是新蜂商城开源项目的第一个大版本更新 根据大量的用户调研 最终决定将新蜂商城升级为 Spring Boot Vue 两个流行技术栈的前后端分离商城
  • Web开发-基础环境配置

    Web开发 基础环境配置 回炉再造 2021 Vue3 0 前端全家桶学习笔记 web前端职业发展路线 技术范围广 发展速度快 兼容浏览器众多 核心技术 html css JavaScript BOM DOM 新的技术 html5 css3
  • QT5使用PCAN读取CAN数据

    文章目录 QT5使用PCAN读取CAN数据 CAN Bus example 重点讲解 pro文件 创建CAN bus Device 参数设置 接收报文 PCAN支持的QCanBusDevice ConfigurationKey类型 QT5使
  • IDEA 插件代理设置

    一 ctrl alt s 打开设置
  • pytorch JIT浅解析

    概要 Torch Script中的核心数据结构是ScriptModule 它是Torch的nn Module的类似物 代表整个模型作为子模块树 与普通模块一样 ScriptModule中的每个单独模块都可以包含子模块 参数和方法 在nn M
  • Python告诉你:李子柒的螺蛳粉到底有多火?

    居家隔离的日子里 各类方便速食食品成了许多人的心头爱 特别是螺蛳粉 异军突起 火遍全网 几乎卖到脱销 有的螺蛳粉热销店铺的购买页面还显示 现在下单 预售40天后发货 这是种什么操作 万万没想到 这些日子发不出货的 除了口罩 还有螺蛳粉 今天
  • 单调队列优化的DP问题

    概述 单调队列就是通过排除求最值时候的冗余 从而是队列具有性质 可以方便求解问题 DP的两个阶段 朴素DP的基本原理 闫氏DP分析法 对朴素DP进行优化 闫氏DP分析法的拓展 在一个有限的集合中求最值 单调队列练习 135 最大子序和 输入
  • JAVA抠图证件照,大头照更换背景或透明

    本文是基础版 使用算法实现请查看 http t csdn cn U8Y4C 使用hutool包 maven引入
  • 道德经学习202220820

    第一章 道可道 非常道 名可名 非常名 无 名天地之始 有 名万物之母 故常无 欲以观其妙 常有 欲以观其徼 jiao 此两者 同出而异名 同谓之玄 玄之又玄 众妙之门 能用言语说出来的道 都不是永恒的终极的道 能形容出来的名都不是永恒的终
  • 22年新款MacBookAir屏幕解析

    先说结论 搭载M2芯片的AIR 很值得买 屏幕 Liquid视网膜显示屏 像素 2550 1664 亮度 500nit 色域 P3 技术 原彩显示技术 Liquid是液晶的意思 但在这里 Liquid是圆角的意思 可以这么说 搭载M2芯片的
  • 【设计模式】-监听者模式和观察者模式的区别与联系

    前言 监听者模式和观察者模式在平时开发中或在Spring源码中经常有碰到 两者乍看上去好像差不多 但为何会分为两种不同的设计模式 究竟是人性的扭曲还是道德的沦丧 让我们一起走进本篇 深入解析两者的异同和使用场景 目录 1 介绍 1 1监听者
  • 数据隐私、AI 交互和知识管理:DB-GPT 的综合解决方案

    python telegram bot python telegram bot Stars 22 9k License GPL 3 0 这个项目是一个提供纯 Python 异步接口的 Telegram Bot API 库 它与 Python
  • extern声明外部结构体

    结构体是一种类型 定义一种类型最好是在 h文件定义 这样其他地方想用这个结构体 只需包含此 h文件即可 但是定义结构体变量的话 最好载 c文件定义 为了防止重复定义 所以不建议在 h文件中定义变量 然后 h里面extern声明 其他 c文件

随机推荐

  • 1 恢复MySQL误删数据

    作者 一个人的孤独自白 cnblogs com mrl p 9959365 html 相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求 如果手法很稳那么很庆幸可以很快完成任务 很不幸某一天突然手一抖把表里的数据修改错误或者误
  • 利用OpenLayers创建wkt字符串

    var polygon OpenLayers Geometry Polygon createRegularPolygon new OpenLayers Geometry Point 6 49 2 18 0 var feature new O
  • blob (Binary Large Object)

    在深度学习中 二进制大对象 Binary Large Object BLOB 通常指的是存储模型权重或预训练模型的文件 这些文件可以非常大 通常以二进制格式存储 并在深度学习框架中用于加载和保存模型 在深度学习中 模型的权重是模型在训练过程
  • recyclerView的滑动

    1 无感知滑动 layoutManager scrollToPositionWithOffset int position int offset 第一个参数是指第几项 第二个参数是跟顶部的距离 当你的屏幕只能显示10项就满了 但是你的dat
  • 数组以及指针数组遍历&Demo

    遍历数组以及指针数组 Demo By C include
  • 【以太坊开发】 问题 etherbase must be explicitly specified

    1 使用geth启动在私有链环境下 提示如下问题 html view plain copy Updated mining threads threads 0 INFO 08 17 21 31 30 Transaction pool pric
  • flutter pubspec添加依赖无法获取flutter_test

    pubspec yaml 文件初次添加的时候拷过来没格式化 packages get 一直失败各种尝试无果 后来格式化了一下 就可以了
  • 【rust】

    系列文章目录 rust 00 开发环境搭建 rust 01 编译并运行第一个rust程序 rust 02 语法基础 变量 不可变 和常量 rust 03 语法基础 数据类型 rust 04 语法基础 函数 rust 05 语法基础 流程控制
  • windows下启动nacos(单机配置)

    windows下启动nacos 下载nacos 找到github地址 并根据对应的版本进行下载 如果下载过慢的话 可以使用迅雷下载 1下载完成后 进行解压 之后打开 conf application properties文件 2 打开后 我
  • 机器学习实战——朴素贝叶斯

    目录 一 朴素贝叶斯理论 1 概述 2 朴素贝叶斯特点 3 贝叶斯决策理论 4 条件概率与全概率公式 5 贝叶斯推断 二 朴素贝叶斯分类器应用 拉普拉斯修正 三 垃圾邮件分类 一 朴素贝叶斯理论 1 概述 朴素贝叶斯算法是有监督的学习算法
  • vue3.0模板

    GitHub Mstian Vue Onepiece Admin vue3 elementPlus后台管理简单模板https github com Mstian Vue Onepiece Admin
  • null,default关键字

    一 null关键字 1 null是空的意思 在表中 默认情况下 所有的字段值都可以为空 1 建表期间 可以对某一字段进行非空约束 not null 在insert时 此字段必须要有数据 create table temo id number
  • libuv之基础

    TCP客户端连接步骤 连接方法 Uv loop t loop uv default loop uv tcp t client malloc uv connect t connect req malloc uv tcp init loop c
  • C++ 仿函数(一)

    目录 一 仿函数是什么 二 仿函数的特点 1 仿函数在使用时 可以像普通函数那样调用 可以有参数 可以有返回值 2 仿函数超出普通函数的概念 可以有自己的状态 编辑3 仿函数可以作为参数传递 三 谓词 一元谓词示例 二元谓词示例 总结 一
  • 银行股的分红是不是比利率要高,投十万银行股一年分红有多少啊?

    工农交建中目前股息均超5 以上 10万元投资银行股 一年分红收益能达到5500左右 银行一年定期存款1 5 10万存款年利息1500 买银行股比存银行一年多收益4000左右
  • dell服务器重装win10,戴尔dell重装win10系统后无法引导的解决方法(原创)

    戴尔新机型都采用 Intel 酷睿第八代以上处理器 戴尔8代以上cpu都不支持传统模式了 默认预装了win10系统不是很好用 想重新安装win10 但是预装win10的机型默认是UEFI引导 但戴尔电脑装win10后出现不能引导情况 一般出
  • OpenFeign配合logback链路追踪

    创建MDC上下文 public class MdcContext MDC上下文 存储tId private static final ThreadLocal
  • 多线程(十)多线程编程示例

    文章目录 一 交替输出1A2B3C4D5E 1 1 synchronized wait notify 1 2 Condition await signal 二 生产者 消费者问题 2 1 synchronized wait notify 2
  • java final关键字修饰局部变量,final关键字的这8个小细节,你get到几个?

    今天来聊 final 关键字 因为最近在看的几本书都讲到了 final 关键字 发现好多小细节自己都忽视了 抽空总结了一下 分享给大家 正文 final关键字是一个常用的关键字 可以修饰变量 方法 类 用来表示它修饰的类 方法和变量不可改变
  • 数据在底层的存储模式

    1 数据的存储模式 大端存储模式 常见于我们的手机等 低地址放高数据 小端存储模式 比如PC 低地址存放低数据 面试题 设计程序判断大小端 这里可以有两种方式 1 写一个函数通过数据类型 int main int a 0x11223344