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

【C进阶】深度剖析数据在内存中的存储

目录

一、数据类型的介绍

1.类型的意义:

2.类型的基本分类

二、整形在内存中的存储

1.原码 反码 补码

2.大小端介绍

3.练习

三、浮点型在内存中的存储

1.一个例子

  2.浮点数存储规则


一、数据类型的介绍

前面我们已经学习了基本的内置类型以及他们所占存储空间的大小:

char          //字符数据类型

short         //短整型

int             //整形

long          //长整形

long long   //更长的整形

float           //单精度浮点型

double      //双精度浮点型

1.类型的意义:

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

2.决定了如何看待内存空间的视角:

int 和float类型都是4个字节,但是一个是整形,一个是浮点型,看待内存空间的视角不一样

2.类型的基本分类

(1)整形家族:

char:

        unsigned char

        signed  char

short :

       unsigned short  [int]     //短整型,这个int整形可以省略

        signed  short   [int]

int :

      unsigned int

        signed  int

long :

       unsigned long [int]

        signed  long [int]

【温馨提示】:char类型也是整形家族的原因:

字符在内存中存储的是字符的ACSII码值(0-127),ASCII码值是整形,所以字符类型归类到整形家)族 

signed -有符号的:当第一位代表符号位的时候,就是有符号的

unsigned -无符号的:当每一位都是数值位,有效位的时候就是无符号的

【注意】:

当我们没有写signed和unsigned时,int,short和long类型默认就是signed有符号的

eg:当我们写出int a的默认的其实就是signed int类型

but :C语言并没有规定char是否是signed char(这个取决于编译器,大部分是signed char)


(2)浮点数家族:都可以表示小数

 float     //精度小一些,单精度

double   //精度大一些,双精度


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

>数组类型

>结构体类型 struct

>枚举类型 enum

>联合类型 union


(4)指针类型

int *pi

char *pc

float *pf

void * pv  (无具体类型的指针)


(5) 空类型

void 表示空类型(无类型)

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

eg:int main(void)就表示main函数不需要参数

但是实际上main函数是有三个参数的int main(int argc,char *argv[  ],char *envp[  ]),这三个参数需要用的时候才需要写,不需要括号直接写void即可

二、整形在内存中的存储

计算机能够处理的是二进制数据,整形和浮点型在内存中也都是以二进制的形式进行存储的

1.原码 反码 补码

整形的二进制表示有三种:原码,反码,补码

正的整数:原码,反码,补码相同

负的整数:原码,反码,补码要进行计算

整数在内存中存储的是补码的二进制序列

eg:

int a = -10;//int类型占4个字节-32bit位
    10000000 00000000 00000000 00001010  原码
    11111111 11111111 11111111 11110101  反码
    1 1111111 11111111 11111111 11110110  补码(最高一位表示符号位,其他31位表示数值位)

    unsigned int b = -10;
    1 1111111 11111111 11111111 11110110  补码(32位全都表示数值位)


对于整形来说,数据存放内存中其实存放的是补码

为什么呢?

使用补码,可以将符号位和数值域统一处理;同时,加减法也可以统一处理(cpu只有加法器),此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路

eg:

    1-1
    电脑转化为1+(-1)
    00000000 00000000 00000000 00000001  1的原反补码
    10000000 00000000 00000000 00000001  -1的原码
    11111111 11111111 11111111 11111110  -1的补码
    11111111 11111111 11111111 11111111  -1的补码
    如果就是简单的原码相加得到的就是-2(还会犹豫要不要加符号位)
    但是如果是补码相加得到的就是正确的结果,每个位上不断进1,最后最前面多出来一位为1直接舍弃,其他位都为0

2.大小端介绍

int a=0x11223344(根据数据的存储44位于低字节处,11位于高字节处)

大端字节序存储:

把一个数据的低位字节处的数据存放在内存的高地址处,高位字节处的数据存放在内存的低地址处

小端字节序存储:

把一个数据的低位字节处的数据存放在内存的低地址处,高位字节处的数据存放在内存的高地址处

【注意】:数据存放的时候是以字节为单位存储讨论顺序的,所以叫做大小端字节序存储

char类型不需要考虑大小端,char类型就占一个字节,没有顺序可言


为什么存在大小端字节序存储呢?

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式


百度笔试题:

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

思路:

给一个int类型的变量a:让其为1(这样十六进制简单0x 00 00 00 01),然后再通过char*一次访问一个字节,打印出来看是00还是01,从而判断大小端

代码实现:

#include<stdio.h>
int main()
{int a = 1;char* p = (char*)&a;   //要将&a(int *)强制转化为char *if (*p == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

【自定义函数进行判断】:

#include<stdio.h>
int check_sys()
{int a = 1;return *(char*)&a;
}
int main()
{if(check_sys()==1)printf("小端\n");elseprintf("大端\n");return 0;
}

3.练习

<1>下面程序输出什么?

#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;
}

答案:

-1 -1 255

解释:

首先-1是整数,原码:10000000 00000000 00000000 00000001

                         反码:111111111 111111111 111111111 111111110

                         补码:111111111 111111111 111111111 111111111

但是char类型只有8个比特位,所以补码存起来就是111111111,而且第一位为符号位(对于a和b)

%d是10进制的形式打印有符号的整数

那么就需要进行整形提升(无符号数高位补0,有符号数高位补符号位)(对原码整形提升)

对于a和b:整形提升后补码为111111111 111111111 111111111 111111111(也就是-1)

对于c:整形提升后补码为00000000 00000000 00000000 111111111(又因为是无符号的整形,补码和原码一样)(也就是255)


 <2>下面程序输出什么?

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

答案:

4294967168

解释:

-128的原码:10000000 00000000 00000000 10000000

           反码:111111111 111111111 111111111 011111111

           补码:111111111 111111111 111111111 10000000

存进a的补码:10000000(1为符号位)

对a进行整形提升:111111111 111111111 111111111 10000000(有符号位高位补符号位1)

%u是10进制的形式打印无符号的整数

那么打印就当a是无符号数打印,对于无符号数原反补码相同,直接算即可


 <3>下面程序输出什么?

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

答案:

4294967168

解释:

虽然signed char最大只能是127,但是还是可以赋值为128,可以自行截断

128的原码:00000000 00000000 00000000 10000000

存进a的补码:10000000(1为符号位)

对a进行整形提升:111111111 111111111 111111111 10000000(有符号位高位补符号位1)

10进制无符号形式打印


【总结】: 

signed char:-128~127

char-假设是有符号的char(1个字节=8bit) (第一位为符号位)第一列为原码

00000000   0

00000001   1

00000010   2

00000011   3

...                ...

011111111  127

10000000 -128  11111111(反) 110000000(补:多出来一位要删去)

10000001  -127  11111110           111111111

...

111111110  -2      10000001            10000010

111111111  -1      10000000            10000001

259545bbc6cc455e84e6d31bce030392.png  

假设是unsigned char:0~255

 00000000

00000001   1

00000010   2

00000011   3

...                

011111111  127

10000000  128

...

111111110  254

111111111  255

f55ff4f0670841ef97bf266f8929b3c7.png


  <4>下面程序输出什么?

int i= -20;
unsigned int j = 10;
printf("%d\n", i+j);

答案:

-10

解释:

-20:原码:10000000 00000000 00000000 00010100

         反码:111111111 111111111 111111111 11101011

         补码:111111111 111111111 111111111 11101100

10:原反补码:00000000 00000000 00000000 00001010(相加时最高位变为符号位)

补码进行相加:111111111 111111111 111111111 11110110(补码)

反码:10000000 00000000 00000000 00001001

原码:10000000 00000000 00000000 00001010(-10)


   <5>下面程序输出什么?

unsigned int i;
for(i = 9; i >= 0; i--)
{
printf("%u\n",i);
}

答案:

9到0再到4294967295,一直减小,死循环

解释:

unsigned int的范围就是>=0的,所以for循环的判断条件恒成立,类比unsigned char当0继续减小,就到了255,unsigned int也是这样的


    <6>下面程序输出什么?

int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a));
return 0;
}

答案:

255

解释:

strlen是统计\0(也就是0)之前的字符个数

a[ i ]里面放的是-1,-2,-3...-128 127 ...6 5 4 3 2 1 0

一共就是128+127=255个数


     <7>下面程序输出什么?

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

答案:

死循环

解释:

unsigned char的范围就是0-255,for循环的条件恒成立,进入死循环


三、浮点型在内存中的存储

常见的浮点数:

3.14159

1E10(也就是1.0*10^10)

浮点数家族包括:float,double,long double类型

浮点数表示的范围:float.h中定义

1.一个例子

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;
}

结果:

ce965ae2386e42bd865ff15d005098d2.png


  2.浮点数存储规则

任意一个二进制浮点数V可以表示成下面的形式

8e461bb8b5c646cfb73859976bcddd99.png

eg:10进制的5.5转化为二进制

101.1(小数点后面一位就是2的-1次方也就是0.5)

二进制浮点数表示也就是(-1)^0*1.011*2^2(小数点提前两位,也就是*2^2(二进制),如果是十进制就是2^10) 

得出:S=0,M=1.011,E=2


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

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


有效数字M的存储:

对于有效数字M,1<=M<2,在计算机内部保存M的时候,默认小数点前面一位为1,所以保存只保存小数点后面的数字,这样就节省了一位数的空间,以32位为例,虽然留给M只有23位,但是相当于保存了24位有效数字 

有效数字E的存储:

 首先E是一个为无符号数,如果E为8位,它的取值范围为0-255;如果E为11位,它的取值范围为0-2047。存入E的真实值时必须加上一个中间值,对于8位的E这个中间值为127,对于11的E,这个中间值为1023

eg:2^10的E为10,所以保存32位浮点数时,必须保存成10+127=137,即10001001

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

(1)E不全为0或不全为1:

指数E的计算值减去127(或1023),得到真实值,再将M小数点前面的1补上

eg:

0.5的二进制为0.1,浮点数表示:1.0*2^(-1),E存储为-1+127=126,也就是01111110,而尾数1.0去除1就是0,那么0.5的二进制表示形式就是:

0 01111110 00000000000000000000000

(2)E全为0:

这时浮点数的指数E等于1-127(或者1-1023)即为真实值

M这时也不需要加上小数点前面的1,而是还原成0.xxxx的小数,这样做是为了表示正负0,以及接近于0的很小的数

(3)E全为1:

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


 现在再来解释一下前面的例子:

从int类型的9来看:

int n=9;

00000000 00000000 00000000 00001001(int类型二进制)

但是当它强制类型转化为float*时,代表的含义就不一样了

0 00000000 00000000000000000001001

这时的E为全0,那么E=-126,M也不用补0,即M=0.00000000000000000001001,S=0

那么*pFloat也就是(-1)^0*0.00000000000000000001001*2^(-126),这个数是极其小的,打印出来就直接是0.000000(float打印小数点后6位)

从float类型的9.0来看:(当*pFloat=9.0以后)

9.0(1001.0)

浮点型表示形式:(-1)^0*1.001*2^3

二进制表示:0 10000010 00100000000000000000

然后%d形式打印:n的视角看这是补码,符号位是0,为正数,原反补码相同,转化为10进制也就是1091567616


本次内容就到此啦,欢迎评论区或者私信交流,觉得笔者写的还可以,或者自己有些许收获的,麻烦铁汁们动动小手,给俺来个一键三连,万分感谢 ! 

相关文章:

【C进阶】深度剖析数据在内存中的存储

目录 一、数据类型的介绍 1.类型的意义&#xff1a; 2.类型的基本分类 二、整形在内存中的存储 1.原码 反码 补码 2.大小端介绍 3.练习 三、浮点型在内存中的存储 1.一个例子 2.浮点数存储规则 一、数据类型的介绍 前面我们已经学习了基本的内置类型以及他们所占存储…...

TortoiseGit安装

一、安装Git环境 Git-2.42.0-64-bit.exe (访问密码: 1666)https://url48.ctfile.com/f/33868548-924037167-76e273?p1666 二、安装TortoiseGit TortoiseGit-2.14.0.1-64bit.msi (访问密码: 1666)https://url48.ctfile.com/f/33868548-924037173-d395c7?p1666 三、安装T…...

巨人互动|游戏出海游戏出海的趋势如何

随着全球游戏市场的不断扩大和消费者需求的多元化&#xff0c;游戏出海作为游戏行业的重要战略之一&#xff0c;正面临着新的发展趋势。本文小编将讲讲游戏出海的趋势&#xff0c;探讨一下未来游戏出海的发展方向与前景。 巨人互动|游戏出海&2023国内游戏厂商加快“出海”发…...

k8s 安装 istio(二)

3.3 部署服务网格调用链检测工具 Jaeger 部署 Jaeger 服务 kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.16/samples/addons/jaeger.yaml 创建 jaeger-vs.yaml 文件 apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata…...

Postman中参数区别及使用说明

一、Params与Body 二者区别在于请求参数在http协议中位置不一样。Params 它会将参数放入url中以&#xff1f;区分以&拼接Body则是将请求参数放在请求体中 后端接受数据: 二、body中不同格式 2.1 multipart/form-data key - value 格式输入&#xff0c;主要特点是可以上…...

基于python+pyqt的opencv汽车分割系统

目录 一、实现和完整UI视频效果展示 主界面&#xff1a; 识别结果界面&#xff1a; 查看分割处理过程图片界面&#xff1a; 二、原理介绍&#xff1a; 加权灰度化 ​编辑 二值化 滤波降噪处理 锐化处理 边缘特征提取 图像分割 完整演示视频&#xff1a; 完整代码链…...

游戏设计的主要部分

游戏设计的主要部分 介绍 游戏设计是创建有趣、挑战性和令人满足的游戏体验的过程。它涵盖了许多方面&#xff0c;从概念开发到实际实施&#xff0c;以及最终的游戏测试和优化。游戏设计师需要考虑玩家的情感、技能挑战、故事情节、游戏世界等多个要素&#xff0c;以确保游戏…...

架构师成长之路Redis第二篇|Redis配置文件参数讲解

Redis.conf文件 官网Redis文档链接:Redis官网 官网Redis config配置文件参数讲解:https://redis.io/docs/management/config/ Redis.conf参考模板例子 : https://redis.io/docs/management/config-file/ Redis 可以使用内置的默认配置在没有配置文件的情况下启动,但是仅…...

jsp+servlet+mysql阳光网吧管理系统

项目介绍&#xff1a; 本系统使用jspservletmysql开发的阳光网吧管理系统&#xff0c;纯手工敲打&#xff0c;系统管理员和用户角色&#xff0c;功能如下&#xff1a; 管理员&#xff1a;修改个人信息、修改密码&#xff1b;机房类型管理&#xff1b;机房管理&#xff1b;机位…...

Next.js基础语法

Next.js 目录结构 入口App组件&#xff08;_app.tsx&#xff09; _app.tsx是项目的入口组件&#xff0c;主要作用&#xff1a; 可以扩展自定义的布局&#xff08;Layout&#xff09;引入全局的样式文件引入Redux状态管理引入主题组件等等全局监听客户端路由的切换 ts.config…...

selenium进阶之web自动化项目框架搭建(Python版)

web自动化项目框架搭建 1、项目结构 web自动化框架的设计&#xff0c;同接口自动化框架一样&#xff0c;采用分层设计。 文件或目录说明common常用模块&#xff0c;常用的一些函数封装testcases用例模块&#xff0c;所有的测试用例test_data用例数据logs日志目录reports报告s…...

qt设计界面

widget.h #ifndef WIDGET_H #define WIDGET_H //防止文件重复包含#include <QWidget> //QWidget类所在的头文件&#xff0c;父类头文件 #include<QIcon> #include<QPushButton> …...

《C和指针》笔记12: 存储类型(自动变量、静态变量和寄存器变量)

文章目录 1. 自动变量&#xff08;auto&#xff09;1.1 自动变量的初始化 2. 静态变量&#xff08;static&#xff09;2.1 静态变量的初始化 3. 寄存器变量&#xff08;register&#xff09; 1. 自动变量&#xff08;auto&#xff09; 在代码块内部声明的变量的缺省存储类型是…...

无限计算力:探索云计算的无限可能性

这里写目录标题 前言云计算介绍服务模型&#xff1a; 应用领域&#xff1a;云计算主要体现在生活中的地方云计算未来发展的方向 前言 云计算是一种基于互联网的计算模型&#xff0c;通过它可以实现资源的共享、存储、管理和处理。它已经成为许多个人、企业和组织的重要技术基础…...

【赋权算法】Python实现熵权法

在开始之前&#xff0c;我们先说一下信息熵的概念。 当一件事情发生&#xff0c;如果是意料之中&#xff0c;那么这个事情就并不能拿来当做茶余饭后的谈资&#xff0c;我们可以说这个事情并没有什么信息和价值。而当一件不可能发生的事情发生的时候&#xff0c;我们可能就会觉…...

docker之 Consul(注册与发现)

目录 一、什么是服务注册与发现&#xff1f; 二、什么是consul 三、consul 部署 3.1建立Consul服务 3.1.1查看集群状态 3.1.2通过 http api 获取集群信息 3.2registrator服务器 3.2.1安装 Gliderlabs/Registrator 3.2.2测试服务发现功能是否正常 3.2.3验证 http 和 ng…...

用NeRFMeshing精确提取NeRF网络中的3D网格

准确的 3D 场景和对象重建对于机器人、摄影测量和 AR/VR 等各种应用至关重要。 NeRF 在合成新颖视图方面取得了成功&#xff0c;但在准确表示底层几何方面存在不足。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 我们已经看到了最新的进展&#xff0c;例如 NVIDIA 的…...

权限提升-Windows本地提权-AT+SC+PS命令-进程迁移-令牌窃取-getsystem+UAC

权限提升基础信息 1、具体有哪些权限需要我们了解掌握的&#xff1f; 后台权限&#xff0c;网站权限&#xff0c;数据库权限&#xff0c;接口权限&#xff0c;系统权限&#xff0c;域控权限等 2、以上常见权限获取方法简要归类说明&#xff1f; 后台权限&#xff1a;SQL注入,数…...

深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

目录 Docker 和 k8s 简介1、kubernetes 组件及其联系1.1 Node1.2 Pod1.3 Service 2、安装docker3、单节点 kubernetes 和 KubeSphere 安装3.1 安装KubeKey3.2 安装 kubernetes 和 KubeSphere3.3 验证安装结果 4、集群版 kubernetes 和 KubeSphere 安装5、kubectl 常用命令6、资…...

Oracle的学习心得和知识总结(二十九)|Oracle数据库数据库回放功能之论文三翻译及学习

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...

新版100句学完7000雅思单词

新版100句学完7000雅思单词 1. As the medical world continues to grapple with what’s acceptable and what’s not, it is clear that companies must continue to be heavily scrutinized for their sales and marketing strategies.(剑桥雅思6) 随着医学界持续努力解决…...

MATLAB图论合集(三)Dijkstra算法计算最短路径

本贴介绍最短路径的计算&#xff0c;实现方式为迪杰斯特拉算法&#xff1b;对于弗洛伊德算法&#xff0c;区别在于计算了所有结点之间的最短路径&#xff0c;考虑到MATLAB计算的便捷性&#xff0c;计算时只需要反复使用迪杰斯特拉即可&#xff0c;暂不介绍弗洛伊德的实现 迪杰斯…...

MySQL 8.0.xx 版本解决group by分组的问题

因为版本升级5.7版本以下是没有这个问题的&#xff0c;8.0版本以上会出现分组问题 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column test1.sys_t.id which is not functionally dependent on columns in GROUP BY clause; t…...

设计模式—原型模式(Prototype)

目录 一、什么是原型模式&#xff1f; 二、原型模式具有什么优缺点吗&#xff1f; 三、有什么缺点&#xff1f; 四、什么时候用原型模式&#xff1f; 五、代码展示 ①、简历代码初步实现 ②、原型模式 ③、简历的原型实现 ④、深复制 ⑤、浅复制 一、什么是原型模式&…...

【pytorch】Unfold和Fold的互逆操作

1. 参数定义 Unfold https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html#torch.nn.Unfold Fold https://pytorch.org/docs/stable/generated/torch.nn.Fold.html#torch.nn.Fold 注意&#xff1a;参数当中的padding是在四周边补零&#xff0c;而当fold后的尺寸…...

【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测

AI学习目录汇总 1、简述 通过前面的学习,已经了解了图像分类模型的原理及实现。图像分类是假定图像中只有一个目标,算法上是对整个图像做的分类。 下面我们来学习“目标检测”,即从一张图像中找出需要的目标,并标记出位置。 2、边界框 边界框:bounding box,就是一个方…...

畅捷通T+用户中locked勒索病毒后该怎么办?勒索病毒解密数据恢复

Locked勒索病毒是一种近年来在全球范围内引起广泛关注的网络安全威胁程序。它是一种加密货币劫持病毒&#xff0c;专门用于加密用户的数据并要求其支付赎金。Locked勒索病毒通过攻击各种系统漏洞和网络薄弱环节&#xff0c;使用户计算机受到感染并被加密锁定时&#xff0c;无法…...

神仙般的css动画参考网址,使用animate.css

Animate.css | A cross-browser library of CSS animations.Animate.css is a library of ready-to-use, cross-browser animations for you to use in your projects. Great for emphasis, home pages, sliders, and attention-guiding hints.https://animate.style/这里面有很…...

江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电

汽车改装除了在外观方面越来越受到消费者的青睐&#xff0c;在性能和实用性提升上面的需求也是日趋增多&#xff0c;能快速有效地对客户指定汽车零部件进行一个改装&#xff0c;是每一个汽车改装企业和工程师的追求&#xff0c;也是未来消费者个性化差异化的要求。下面CASAIM中…...

数据结构学习 --4 串

数据结构学习 --1 绪论 数据结构学习 --2 线性表 数据结构学习 --3 栈&#xff0c;队列和数组 数据结构学习 --4 串 数据结构学习 --5 树和二叉树 数据结构学习 --6 图 数据结构学习 --7 查找 数据结构学习 --8 排序 本人学习记录使用 希望对大家帮助 不当之处希望大家帮忙纠正…...

探索Kotlin K2编译器和Java编译器的功能和能力

文章首发地址 Kotlin K2编译器是Kotlin语言的编译器&#xff0c;负责将Kotlin源代码转换为Java字节码或者其他目标平台的代码。K2编译器是Kotlin语言的核心组件之一&#xff0c;它的主要功能是将Kotlin代码编译为可在JVM上运行的字节码。 K2编译器快速介绍 编译过程&#xff…...

如何安装chromadb

下载最新版本的python3.10 因为chromadb需要sqlite3的最小版本是3.35.0 使用如下命令安装 pip install chromadb 安装完毕后在python3的命令行窗口输入 import chromadb 如果不报错代表成功&#xff0c;如果报错sqlite3的最小版本是3.35.0&#xff0c;使用如下方式解决 …...

vue实现把字符串中的所有@内容,替换成带标签的

前言&#xff1a; 目前有个需求是&#xff0c;要把输入框里面的还有姓名高亮。 要求&#xff1a; 1、必须用 v-html ,带标签的给他渲染 2、把字符串中的全部查找出来&#xff0c;替换掉&#xff0c;注意要过滤已经替换好的&#xff0c;不然就是无限循环了 实现方法&#xff1a…...

「MySQL-00」MySQL在Linux上的安装、登录与删除

目录 一、安装MySQL 0. 安装前请先执行一遍删除操作&#xff0c;把预装或残留的MySQL删除掉 1. 安装yum源 &#xff08;解决了在哪里找MySQL的问题&#xff09; 2. 安装哪个版本的MySQL 二、启动和登录MySQL 三、删除MySQL / MariaDB 安装与卸载前&#xff0c;建议先将用户切换…...

8月29-31日上课内容 第五章

第一章...

数据库导出工具

之前根据数据库升级需求&#xff0c;需要导出旧版本数据&#xff08;sqlserver 6.5&#xff09;&#xff0c;利用c# winfrom写了一个小工具&#xff0c;导出数据。 →→→→→多了不说&#xff0c;少了不唠。进入正题→→→→ 连接数据库&#xff1a;输入数据库信息 连接成功…...

ChatGPT 制作可视化柱形图突出显示第1名与最后1名

对比分析柱形图的用法。在图表中显示最大值与最小值。 像这样的动态图表的展示只需要给ChatGPT,AIGC,OpenAI 发送一个指令就可以了, 人工智能会快速的写出HTML与JS代码来实现。 请使用HTML,JS,Echarts完成一个对比分析柱形图,在图表中突出显示第1名和最后1名用单独一种不…...

前端学习记录~2023.8.10~JavaScript重难点实例精讲~第6章 Ajax

第 6 章 Ajax 前言6.1 Ajax的基本原理及执行过程6.1.1 XMLHttpRequest对象&#xff08;1&#xff09;XMLHttpRequest对象的函数&#xff08;2&#xff09;XMLHttpRequest对象的属性 6.1.2 XMLHttpRequest对象生命周期&#xff08;1&#xff09;创建XMLHttpRequest对象&#xff…...

2023年Java核心技术第九篇(篇篇万字精讲)

目录 十七 . 并发相关基础概念 17.1 线程安全 17.2 保证线程安全的两个方法 17.2.1 封装 17.2.2 不可变 17.2.2.1 final 和 immutable解释 17.3 线程安全的基本特性 17.3.1 原子性&#xff08;Atomicity&#xff09; 17.3.2 可见性&#xff08;Visibility&#xff09; 17.3.2.1…...

C#上位机中的单例应用思考

文章目录 一、前言二、上位机单例应用场景2.1 上位机2.2 单例及其应用2.3 上位机中的应用2.3.1 用户登录信息2.3.2 配置文件2.3.3 数据连接池 2.4 一个应用场景的思考 三、总结 一、前言 之前写过一篇关于单例的文——C#中单例模式的实现&#xff0c;讲了讲单例是什么以及在C#…...

Python分享之redis

String 操作 redis中的String在在内存中按照一个name对应一个value来存储 set() #在Redis中设置值&#xff0c;默认不存在则创建&#xff0c;存在则修改 r.set(name, zhangsan) 参数&#xff1a; set(name, value, exNone, pxNone, nxFalse, xxFalse) ex&#xff…...

Linux常用命令——dd命令

在线Linux命令查询工具 dd 复制文件并对原文件的内容进行转换和格式化处理 补充说明 dd命令用于复制文件并对原文件的内容进行转换和格式化处理。dd命令功能很强大的&#xff0c;对于一些比较底层的问题&#xff0c;使用dd命令往往可以得到出人意料的效果。用的比较多的还是…...

DETR-《End-to-End Object Detection with Transformers》论文精读笔记

DETR&#xff08;基于Transformer架构的目标检测方法开山之作&#xff09; End-to-End Object Detection with Transformers 参考&#xff1a;跟着李沐学AI-DETR 论文精读【论文精读】 摘要 在摘要部分作者&#xff0c;主要说明了如下几点&#xff1a; DETR是一个端到端&am…...

网络流量监控-sniffnet

{alert type“info”} 今天来分享一个监控流量的应用sniffnet。 github项目地址&#xff1a;https://github.com/GyulyVGC/sniffnet {/alert} 可以在github的readme上看到这个程序有的特性&#xff1a; 为什么要介绍它呢&#xff1a;主要是多线程、跨平台、可靠、操作简单 我…...

验证go循环删除slice,map的操作和map delete操作不会释放底层内存的问题

目录 切片 for 循环删除切片元素其他循环中删除slice元素的方法方法1方法2&#xff08;推荐&#xff09;方法3 官方提供的方法结论 切片 for 循环删除map元素goalng map delete操作不会释放底层内存go map原理源码CRUD查询新增 操作注意事项map元素是无法取址的map是线程不安全…...

C++二级题2

数字字符求和 #include<iostream> #include<string.h> #include<stdio.h> #include<iomanip> #include<cmath> #include<bits/stdc.h> int a[2000][2000]; int b[2000]; char c[2000]; long long n; using namespace std; int main() {ci…...

DataWhale 机器学习夏令营第三期——任务二:可视化分析

DataWhale 机器学习夏令营第三期 学习记录二 (2023.08.23)——可视化分析1.赛题理解2. 数据可视化分析2.1 用户维度特征分布分析2.2 时间特征分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录二 (2023.08.23)——可视化分析 2023.08.17 已跑通baseli…...

ubuntu 上安装flutter dart android studio

因为国内网站不能使用 使用一下&#xff1a; vi ~/.bashrc 最后添加 export FLUTTER_STORAGE_BASE_URLhttps://mirrors.cloud.tencent.com/flutter export PUB_HOSTED_URLhttps://mirrors.tuna.tsinghua.edu.cn/dart-pub export PATH$PATH:/usr/local/go/bin export GOPROXY…...

【Golang】go交叉编译

交叉编译是用来在一个平台上生成另一个平台的可执行程序 。Go 命令集是原生支持交叉编译的。 Mac下编译&#xff1a;Linux 或 Windows 的可执行程序 # linux 可执行程序 CGO_ENABLED0 GOOSlinux GOARCHamd64 go build main.go # Windows可执行程序 CGO_ENABLED0 GOOSwindow…...

【人工智能】—_贝叶斯网络、概率图模型、全局语义、因果链、朴素贝叶斯模型、枚举推理、变量消元

文章目录 频率学派 vs. 贝叶斯学派贝叶斯学派Probability&#xff08;概率&#xff09;:独立性/条件独立性&#xff1a;Probability Theory&#xff08;概率论&#xff09;:Graphical models &#xff08;概率图模型&#xff09;什么是图模型&#xff08;Graphical Models&…...