数据在内存中的存储

2023-05-16

数据在内存中的存储

文章目录

  • 数据在内存中的存储
    • 计算机中的数据
    • 数据类型
      • 类型的基本归类
      • 整型在内存中的存储
      • 原码、反码、补码
      • 大小端介绍
      • 浮点型在内存中的存储
      • 二进制与十进制的转换

计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。
内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。5V 是通电,用1来表示,0V 是断电,用0来表示。所以,一个元器件有2种状态,0 或者 1。

通过电路来控制这些元器件的通断电,会得到很多0、1的组合。例如,8个元器件有 2^8=256 种不同的组合,16个元器件有 2^16=65536 种不同的组合。虽然一个元器件只能表示2个数值,但是多个结合起来就可以表示很多数值了。

一般情况下我们不一个一个的使用元器件,而是将8个元器件看做一个单位,即便是表示很小的数,例如 1,也需要8个,也就是 00000001。

1个元器件称为1比特(Bit)或1位,8个元器件称为1字节(Byte),那么16个元器件就是2Byte,32个就是4Byte,以此类推:

  • 8×1024 Bit就是1024Byte,简写为1KB;
  • 8×1024×1024 Bit就是1024KB,简写为1MB;
  • 8×1024×1024×1024 Bit就是1024MB,简写为1GB。

现在,你知道1GB的内存有多少个元器件了吧。我们通常所说的文件大小是多少 KB、多少 MB,就是这个意思。

单位换算:

1Byte = 8 Bit
1KB = 1024Byte = 2^10Byte
1MB = 1024KB = 2^20Byte
1GB = 1024MB = 2^30Byte
1TB = 1024GB = 2^40Byte
1PB = 1024TB = 2^50Byte
1EB = 1024PB = 2^60Byte

我们平时使用计算机时,通常只会设计到 KB、MB、GB、TB 这几个单位,PB 和 EB 这两个高级单位一般在大数据处理过程中才会用到。

在内存中没有abc这样的字符,也没有gif、jpg这样的图片,只有0和1两个数字,计算机也只认识0和1。所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成0和1的组合。

计算机中的数据

在这里插入图片描述

正如大家所看到的,我们所使用的数据在计算机内存中是以二进制位序列的方式存放的;如图中的…0000001000000000000000000000000011001100…;在这些二进制位序里,每一位上的数字,不是0就是1。在计算机中,位(bit)是含有0或1值的一个单位。在物理上,它的值是一个负或正电荷。也就是计算机中可以通过电压的高低来表示一位所含有的值。如果是0,则用低电压表示,如果是1,则用高电压表示。

在上面的二进制位序这个层次上,位的集合没有结构,很难来解释这些系列的意义。为了能够从整体上考虑这些位,于是给这些位序列强加上结构的概念,这样的结构被称作字节(byte)字(word)。通常,一个字节由8位构成,而一个字由32位构成,即4个字节(也可能是8字节)

数据类型

基本的内置类型:
    char		//字符数据类型
    short		//短整型
    int 		//整型
    long		//长整型
    long long   //更长的整型
    float		//单精度浮点型
    double		//双精度浮点型
    //C语言中没有字符串类型

类型意义:

  • 使用这个类型开辟内存空间的大小(大小决定了使用范围)

    例如:char c决定了c的范围只能在-128~127之间

  • 如何看待内存空间的视角

在这里插入图片描述

如图所示,a和b在内存中的存储情况,图中a也是4字节的(漏圈了后面的00 00);a和b都是10,但在内存中的存储却不一样,主要是因为整型和浮点型在内存中的存储形式不同导致的。

类型的基本归类

整型家族

char 
    		unsigned char
    		signed char
short
    		unsigned short [int]
    		signed short [int]
int 
    		unsigned int
    		signed int 
long
    		unsigned long [int]
    		signed long [int]

浮点数家族

float
double

结构类型

数组类型 int[5]   -----  int arr[10]的类型为int[10]
结构体类型 struct
枚举类型 enum
联合类型 union

指针类型

int *pi
char *pc
float *pf
void *pv

空类型

void表示空类型(无类型)

通常应用于函数的返回类型、函数的参数、指针类型

整型在内存中的存储

一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。

比如:
    int a = 20;
	int b = -10;

我们知道要为a分配四个字节的空间,那要如何来存储a的数值呢?

整数类型数据在内存中是以补码的形式进行存储,浮点型数据以分段式进行存储

原码、反码、补码

计算机中有符号整型有三种表示方法,即原码、反码和补码;

三种表示方法均有符号位数值位两部分,符号位都是0表示,1表示,而数值位三种表示方法各不相同。

在内存中,有符号整数是以补码的形式进行存储,而无符号整数则存储自身的绝对值。

原码

直接将数值按照正负数的形式翻译成二进制就可以

反码

将原码的符号位不变,其它位依次按位取反就可以得到

补码

反码+1就得到补码

正数的原、反、补码都相同

对于有符号整型来说,数据存放内存中其实存放的就是补码;在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器),如果两个补码相加时最高位(符号位)有进位,则进位被舍弃。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路

看一下变量在内存中的存储情况

在这里插入图片描述

可以看到对于a和b分别存储的都是补码(不同变量在内存中的存储是无规律的,哪里有足够的空间就存在哪里,要靠地址才能找到数据),只是字节存储的顺序感觉不太对,我们存储的数据是0x0000000a,而在内存中却成了0x0a000000;因为我的电脑是小端存储模式。

大小端介绍

大端(存储)模式:指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;

小端(存储)模式:指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

为什么有大端和小端

因为在计算机系统中,是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),

如果只是存储char类型,当然就不需要考虑大小端问题,当如果存储short类型或者大于2个字节的其它类型,就需要考虑是将高字节存在前面还是将低字节存在前面,为了应对这种多字节安排问题,就产生了大端模式和小端模式。

实际上并不是只存在大端模式和小端模式,例如0x11223344,我们采用11 22 33 44这种大端存储模式,也可以采用44 33 22 11这种小端存储模式,但还可以22 11 44 33、33 44 11 22等等,这是一个排序问题,但相比于其它的存储模式,大小端存储模式更有意义,以至于被我们所学习。

例如一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为高字节, 0x22为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x10 中, 0x22 放在高地址中,即 0x00中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

在这里插入图片描述

从内存中取数据时一定是从低地址位向高地址位取

例如:如果在大端存储模式下运行一下代码:

int i = 1;
char c = i;
printf("%d",c);

输出结果为:0

因为1在内存中的存储为:00 00 00 01,将i赋给c时,c为0x00;c在内存中为:00 00 00 00;以%d格式输出为0.

大小端的优点

大端排序的好处是接收数据的程序可以优先得到数据的最高位,以便快速反应。

在串行通信测试程序中,计算机显示的字节顺序一般就是接收顺序。如果用大端编码的话,测试程序直接就可以显示出从大到小排列好的数据。而小端排序的方向相反,可视性不好,容易看花眼掉。

结论:

  1. **串行通信(包括以太网、WIFI、串口、USB等)如果采用大端编码有时会使系统响应更快速。**
  2. **串行通信采用大端编码有利于调试。**

小端排序下,选定一个数据的起点后,只需要重复进位加法就可以实现高精度加法计算。减法也是一样。数组的第0位固定是最低位。而大端方式下,如果高精度计算的精度可变,就很难确定数组的第0位到底代表多大。不同精度的计算还会产生数据对齐问题。比如早期的16位CPU中,int类型和long类型做加法,用小端排序就很容易从指针位置开始计算。而大端排序则非常复杂。加法运算是非常常用的运算,其性能直接影响程序的整体性能。所以CPU中要采用性能较好的小端排序。

由于CPU本身是小端排序,如果内存和文件也采用小端排序的话,就可以把文件中的数据直接存储到内存中,再直接把内存中的数据存储到CPU的寄存器。这样不仅提高计算机的性能,程序也变得简单。

结论是:所有直接与硬件有关的代码都适合按小端排序

原文链接:https://blog.csdn.net/recclay/article/details/78986545

相关习题

在这里插入图片描述

-1的原码为10000000 00000000 00000000 00000001,

​ 补码为11111111 11111111 11111111 11111111;

因为a,b,c都为char类型,所以存放到a,b,c中的二进制数就取-1补码的低字节1111 1111;而当使用%d整型打印时,需要对a,b,c进行整型提升,a,b为有符号数,提升时补符号位,即:11111111 11111111 11111111 11111111,%d意思是认为内存中存的是有符号整数,需要转为原码输出为-1;而c为无符号char,提升补0,即:00000000 00000000 00000000 11111111;输出为255.


在这里插入图片描述

-128的二进制表示为10000000 00000000 00000000 10000000

在内存中的存储为 11111111 111111111 11111111 10000000;

因为a为char类型,只能存8个位,所以a为:1000 0000;由于要以%u的格式输出,默认内存中的数据为无符号整型,需要对a进行整型提升,因为a为有符号数,提升时补符号位:11111111 11111111 11111111 10000000;直接输出为FFFFFF80.


在这里插入图片描述

128在内存中为00000000 00000000 00000000 10000000;a为char:10000000;以%u的格式输出,对a进行整型提升:11111111 11111111 11111111 10000000;直接输出为FFFFFF80.


在这里插入图片描述

-20在的二进制表示:10000000 00000000 00000000 00010100,

​ 在内存中为:11111111 11111111 11111111 11101100;

​ 所以i为整型:11111111 11111111 11111111 11101100;

​ 10在内存中为:00000000 00000000 00000000 00001010,

​ 所以j为整型:00000000 00000000 00000000 00001010;

​ i+j为:11111111 11111111 11111111 11110110;以%d格式输出,默认内存中为有符号整型, 转为原码为: 10000000 00000000 00000000 00001010;即为-10.


在这里插入图片描述

因为i为无符号整型,不存在负数,当i为0再减1时,i为4294967295.所以i永远不会小于0,为死循环。


在这里插入图片描述

字符数组明明有1000个数值,但算出来的结果为什么只有255个?

其实a数组的确拥有1000个数值,但由于strlen函数是用来计算字符串长度的,将以\0结尾的字符串作为一个字符串处理,\0的ASCII码为0;而a数组的存储数值为-1、-2、…、-128、127、126、…、1、0、-1、-2…;刚好a[255]为0,strlen函数到这里就截止了,算出来的长度为255,a[255]=0没有算到长度里面

PS:如果这里赋值给a数组的为‘0’而不是0,那结果将不一样,因为‘0’的ASCII码为48,而strlen函数需要遇到ASCII码为0即内存中的数值为0时才会结束字符串长度的计算。


在这里插入图片描述

会陷入死循环,因为无符号字符类型的最大值为255,是不可能大于255的。


浮点型在内存中的存储

常见的浮点数:

3.14159 1E10浮点数家族包括:floatdoublelonglong double类型。浮点数表示的范围:float.h中定义浮点数存储的例子:

浮点数在内存中的存储形式

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以由符号位指数位尾数位三部分组成;表示成下面的形式:

  • (-1)^S * M * 2^E

  • (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数

  • M为尾数位,表示有效数字,大于等于1,小于2

  • E表示指数位。

举例来说:

十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上面V的格式,可以得出s=0,M=1.01,E=2。

十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,s=1,M=1.01,E=2。

IEEE 754规定:对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

在这里插入图片描述

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

在这里插入图片描述

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为一个无符号整数unsigned int) 这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1024。比如,2^10的E 是10,所以保存成32位浮点数时,必须保存10+127=137,即10001001

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

E不全为0或不全为1

这时,浮点数就采用下面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。 比如: 0.5(1/2)的二进制形式为0.1,由于规定正数部分必须为1,即将小数点右移1位,

则为1.0*2^(-1),其阶码为-1+127=126,表示为01111110,而尾数1.0去掉整数部分为0,补齐0到23位00000000000000000000000,则其二进制表示形式为:

0 01111110 00000000000000000000000

E全为0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

E全为1

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

因为某些有限的十进制小数转换二进制小数表示并储存后,其尾数位为无限循环;故很多浮点型数据是不精准的 , 有误差
在这里插入图片描述

n和 *pFloat 在内存中明明是同一个数,为什么浮点数和整数的解读结果会差别这么大?

要理解这个结果,一定要搞懂浮点数在计算机内部的表示方法。

为什么 0x00000009 还原成浮点数,就成了 0.00000000 ? 首先,将 0x00000009 拆分,得到第一位符号位s=0,后面8位的指数 E=00000000 ,最后23位的有效数字M=000 0000 0000 0000 0000 1001。

9 -> 0000 0000 0000 0000 0000 0000 0000 1001

由于指数E全为0,所以符合下面所讲内容的第二种情况。因此,浮点数V就写成: V=(-1)^0 × 0.0000 0000 0000 0000 0001 001×2^(-126) =1.001×2^(-146)显然,V是一个很小的接近于0的正数,所以用十进制小数表示就是0.000000。

再看例题的第二部分。 请问浮点数9.0,如何用二进制表示?还原成十进制又是多少? 首先,浮点数9.0等于二进制的1001.0,即1.001×2^3。

9.0 -> 1001.0 ->(-1)^0 1.001 2^3 -> s=0, M=1.001,E=3+127=130

那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3+127=130,即10000010。 所以,写成二进制形式,应该是s+E+M,即

0 10000010 001 0000 0000 0000 0000 0000

这个32位的二进制数,还原成十进制,正是** 1091567616 **。

二进制与十进制的转换

整数部分:

二进制转为十进制:

​ 1010 –> 1*23+0+1*21+0 = 10

在这里插入图片描述

十进制转为二进制:

​ 10 -> 1010

在这里插入图片描述

小数部分:

0.25 –> 0.01

在这里插入图片描述

0.01–>0.25

在这里插入图片描述


我目前也还处于学习C语言阶段,如果有那部分内容理解得不对的,希望各位指正一下。


参考引用:http://c.biancheng.net/view/1726.html

其它文章:
>>cmake
>>Markdown学习笔记
>>标准输入输出函数
>>printf源码

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

数据在内存中的存储 的相关文章

  • 5分钟带你了解音视频开发

    前言 想赚钱 xff0c 第一点就得选对自己的方向 xff0c 有的行业和领域 xff0c 无论你如何努力 xff0c 天花板也不过如此 选对时代的风口 xff0c 就算是头猪都能被吹上天 xff0c 今天我们就来聊聊音视频开发 蓬勃发展的
  • C# 学习笔记(一)-- C# 语言和 .NET 框架

    从今天开始 xff0c 在这里记录重新学习 C 的学习笔记 导语 之前曾经自学过一段时间的 C xff0c 也写过一些 WinForm 的小工具 个人认为 C 是我所见过的用法最为优雅 xff0c 使用起来最为舒服的语言 xff0c 因此便
  • Ubuntu 添加开机/关机执行脚本与service的理解

    最近碰到一个需求是需要在ubuntu中插入一个关机脚本 xff0c 在系统关机之前执行它 在网上浏览了很多资料 xff0c 但是没有切实可行的方法 xff0c 大多数的博客都是比较陈旧的方法 xff0c 可能已经不适用于最新的ubuntu1
  • Linux 进程间通信基础(四)--fifo管道

    最近正好有一些空余时间 xff0c 在这里总结一下曾经使用过的Linux进程间通信的几种方法 xff0c 贴出来帮助有需要的人 xff0c 也有助于自己总结经验加深理解 上一次我们梳理了pipe管道的相关知识 xff0c 这一次梳理fifo
  • 利用二进制文件制作自己的Debian软件安装包

    在使用Ubuntu系统的时候 xff0c 我们已经习惯了使用Debian风格的软件安装方式 即使用apt get install命令安转或dpkg i deb的方式安装debena软件包 但有时程序没有放到Ubuntu的源服务器上且不提供d
  • Tortoise Git 克隆出现"fatal: Authentication failed for"

    使用Tortoise Git克隆时出现 34 fatal Authentication failed for 34 的错误 xff0c 并且他还不让你输入用户名和密码 xff0c 寻找了许多办法 xff0c 看到最多的是在Git Bash中
  • 怎么解决 接口请求 504 Gateway Time-out

    HTTP 504 Gateway Timeout 错误通常是由于网关或代理服务器无法在规定的时间内从上游服务器接收到响应而导致的 这可能是由于上游服务器过载或网络问题导致的 要解决此问题 xff0c 可以尝试以下步骤 xff1a 检查上游服
  • WSL无法使用npm

    报错信息 root 64 DESKTOP U2RC2DU npm bash mnt c Program Files nodejs npm bin sh M bad interpreter No such file or directory
  • HDU 3700 Line belt

    Line belt Time Limit 2000 1000 MS Java Others Memory Limit 32768 32768 K Java Others Total Submission s 3669 Accepted Su
  • Ubuntu中使用framebuffer的方法

    打开 etc initramfs tools modules文件 xff0c 在末尾加上 xff1a fbcon vesafb 打开 etc modprobe d blacklist framebuffer xff0c 找到 blackli
  • html5.超链接标签,图片标签

    lt a gt 超链接标签 a标签常用的属性 xff1a href 用于指定链接的资源 target 设置打开新资源的目标 Blank 在独立的窗口上打开新资源 self 在当前窗口打开新资源 file file协议 xff08 文件协议
  • ubuntu22.04 搭建 Pytorch环境

    关于电脑 第一步 安装anaconda 1 进入官网 链接 anaconda 2 下载linux的sh版 3 在对应位置输入 span class token function sh span 文件名 sh 4 选择 yes 5 选择no
  • opencv的ORB特征(slambook2 orb_cv.cpp代码详解)

    ORB特征提取与匹配 slambook2 ch7 orb cv cpp 1 头文件 span class token macro property span class token directive hash span span clas
  • Debian安装nodejs

    安装指定版本nodejs xff0c 以18 X版本为例 1 通过curl命令向系统中添加NodeSource存储库 curl sL https deb nodesource com setup 18 x bash xff08 如果提示 c
  • pip安装第三方库全攻略:普通安装、安装whl后缀文件、使用国内镜像安装

    简介 xff1a pip 是 Python 的包安装程序 其实 xff0c pip 就是 Python 标准库 xff08 The Python Standard Library xff09 中的一个包 xff0c 只是这个包比较特殊 xf
  • Python:处理cv2模块putText中文无法识别问题

    简介 xff1a 在cv2中 xff0c 目前putText函数中文是无法直接使用的 xff0c 需要进行一点的转换 解决办法为通过PIL模块重新封装一个函数 xff0c 直接调用 如图 xff1a 通过PIL模块改造 xff1a new
  • VLC播放电视直播rtmp流地址

    简介 xff1a RTMP是Real Time Messaging Protocol xff08 实时消息传输协议 xff09 的首字母缩写 该协议基于TCP xff0c 是一个协议族 xff0c 包括RTMP基本协议及RTMPT RTMP
  • Python:global的使用

    简介 xff1a 1 global是Python中的全局变量关键字 2 全局变量是编程术语中的一种 xff0c 源自于变量之分 3 变量分为局部与全局 xff0c 局部变量又可称之为内部变量 4 由某对象或某个函数所创建的变量通常都是局部变
  • Python:opencv画点、圆、线、多边形、矩形

    简介 xff1a 机器学习视觉方向一般都需要在图像中添加标注框 xff0c 标注框有着很大的用处 xff0c 特别是对图像中某些需要关注的特征起到圈定的效果 xff0c 方便对特征选择进行处理 相关攻略 xff1a 机器学习 xff1a 基

随机推荐

  • adb重启或关机手机命令

    简介 xff1a 在某些特殊场景中 xff0c 例如手机真机不在身边 xff0c 但已通过adb进行连接 xff0c 可以使用命令进行远程关机或者重启 相关攻略 xff1a adb xff1a 常用命令 adb xff1a win10系统下
  • docker:更换镜像源

    简介 xff1a 因为国内的网络访问问题 xff0c 为加快拉取镜像速度 xff0c 建议设置docker国内镜像源 相关攻略 xff1a win10 xff1a 安装docker和测试安装redis centos7 6 xff1a 安装d
  • 七大顶级Linux桌面比较

    1七大顶级Linux桌面 xff1a Unity 对于开源Linux平台来说 xff0c 如何选择就是首要解决的问题 通常Linux发行版都有默认的桌面成为你的首选 xff0c 但目前可供选择的桌面环境种类繁多 特别是Ubuntu系统一个平
  • Linux:安装go环境

    简介 xff1a Go xff08 又称 Golang xff09 是 Google 的 Robert Griesemer xff0c Rob Pike 及 Ken Thompson 开发的一种静态强类型 编译型语言 Go 语言语法与 C
  • docker应用:搭建私有云盘

    简介 xff1a NextCloud是一个开源的云存储解决方案 xff0c 可以在自己的服务器上搭建个人云存储系统 它提供了与市面上主流云存储服务 xff08 如Dropbox Google Drive xff09 相似的功能 xff0c
  • Flask+A-Frame:交互式全景图展示网站

    简介 xff1a 通过结合 Flask 轻量级 Web 框架与 A Frame 3D 和 VR 技术 xff0c 实现了一个可交互的全景图展示功能 xff0c 用户可以在浏览器中自由观看 旋转和缩放全景图片 项目的核心是使用 Flask 搭
  • OpenCV合成全景图

    简介 xff1a OpenCV 利用特征提取 特征匹配 齐次估计 图像配准和图像融合等技术 xff0c 将一系列图像合成为全景图 OpenCV 和 Pillow 是两个功能强大的 Python 图像处理库 xff0c 但它们在处理全景图拼接
  • BDD行为驱动开发+Python案例解析

    简介 xff1a BDD xff08 Behavior Driven Development xff0c 行为驱动开发 xff09 是一种敏捷软件开发方法 xff0c 它强调软件应该按照预期的行为来开发 BDD的核心理念是使用自然语言编写的
  • 操作系统迭代、Debian安装教程

    前言 最近在考虑公司生产环境操作系统的迭代问题 目前 xff0c 公司业务主要跑在CentOS7和8上面 xff0c 由于CentOS早已停止了7和8的支持 xff0c 新版的CentOS Stream也从RHEL的下游变成了上游 xff0
  • Debian修改DNS

    原文链接 Debian的DNS文件默认为 etc resolv conf 查看当前的DNS cat etc resolv conf 下图中画出的就是当前系统的DNS 如果想修改DNS的话 xff0c 可以直接vim 来修改文件 xff0c
  • 配置JupyterLab远程密码访问

    文章目录 部署环境配置步骤启动和连接访问启动连接访问 有些时候因为某些原因 xff08 如本地机器资源不足 数据不能离网等 xff09 xff0c 需要使用本地电脑连接远程服务器进行开发工作 xff0c 在这里记录下如何在远程Linux上配
  • linux查看 jre 安装目录

    近期对接平安银行项目 xff0c 要求放国密 jar包到jre目录 xff0c 网上也找了一些命令 xff0c 下面这个亲测有用 xff0c 特此记录一下 xff0c 我的系统版本是3 10 0 693 el7 x86 64 步骤 1 使用
  • Python选择网卡发包及接收数据包

    当一台计算机上有多个网卡时 xff0c 需要选择对应IP地址的网卡进行发送数据包或者接受数据包 1 选择网卡发包 xff08 应用scapy xff09 xff1a plface 61 conf route route 34 34 0 为对
  • php 使用 Excel/reader.php, 导入excel到数据库 ,解决The file is not readable。。

    今天小伙伴上传excel到服务器 并导入到数据库中 xff0c 可是文件一直出现 The file is not readable 是哪里的代码抛出的异常呢 xff1f 是Spreadsheet Excel Reader类里面 其中抛出异常
  • “The Language Support for Java server crashed“ 问题解决方案

    The Language Support for Java server crashed 问题解决方案 环境 xff1a Windowsvs code 1 356 14日最新发布的VSCodeJavaInstaller online win
  • (循环读取网易云缓存文件转mp3)

    循环读取网易云缓存文件转mp3 import java io DataInputStream import java io DataOutputStream import java io File import java io FileIn
  • 洛谷P4180 [BJWC2010]严格次小生成树

    传送门 之前写过一次 xff0c 但是理解不深刻 xff0c 复习之后有了更加细节的一些理解 好了进入正题 首先 xff0c 我们需要知道次小生成树一定是在最小生成树的邻集中 xff0c 即次小生成树与最小生成树只会有一条边的差别 所以我们
  • MarkDown学习笔记

    MarkDown学习笔记 目录 MarkDown学习笔记 1 标题2 段落3 文字3 1斜体3 2加粗3 3斜体 43 加粗3 4删除线3 5下划线3 6字体背景 4 分隔线5 扩展语法的说明6 高亮 xff08 需要勾选扩展语法 xff0
  • 格式化标准输出函数printf()与格式化标准输入函数scanf()

    printf 函数与scanf 函数 文章目录 printf 函数与scanf 函数格式化标准输出函数 printf 相关函数 xff1a 返回值参数执行顺序打印较长字符串格式控制符 xff1a 输出缓冲区printf 的标志转义字符类型修
  • 数据在内存中的存储

    数据在内存中的存储 文章目录 数据在内存中的存储计算机中的数据数据类型类型的基本归类整型在内存中的存储原码 反码 补码大小端介绍浮点型在内存中的存储二进制与十进制的转换 计算机要处理的信息是多种多样的 xff0c 如数字 文字 符号 图形