当前位置: 首页 > Web前端 > JavaScript

计算机基础补全

时间:2023-03-26 22:14:32 JavaScript

1、计算机中“位”中存储数据的最小单位。在计算机中的二进制数制中,位,简写为b,也叫位,每一个0或1就是一个位。计算机中的CPU位数是指CPU一次可以处理的最大位数。在二进制数制中,位简写为b,也称位,每一个二进制数0或1就是一个位。例如,32位计算机的CPU可以在一个机器周期内处理32位二进制数据的计算。1bit=0.125bytes1byte等于8bits,即1Byte=8bit128bits(16bytes*8bit)。我们以Rust语言为例:猜猜:i8=255(0~2^8-1)//这里的i8表示二进制中8位的最大值为11111111//11111111(二进制)===255(十进制)//表示内存允许存储的值在0到255之间//当你在guess的内存块中存储256时,程序会出现问题,溢出。//当然你存25个号或者38个号,比如。它们的大小是2个字节,也就是16bit。//因为英文和数字占一个字节////i32又叫4字节整数,因为一个字节等于8位,32位/8=4,占4字节//i16又叫双字节Integer//i8也叫单字节整数2.浅谈编码Base64,Hex,UTF-8,Unicode,ASCII码计算机只认二进制码,0和1,所以我们现在看到的字都是用二进制数据编码的后。8位(bit)一个字节,比如01011100就是一个字节。英文和数字占一个字节,中文占一个utf-8字符,也就是两个字节。补充:缓冲区的底层内容是二进制的,但往往是以十六进制数组的形式显示,而不是十六进制字符串!!ASE-128-CBC是指每个加密数据块的大小固定为128位(16字节),而不是要求你传入的密钥是十六进制字符串。所以有些人把缓冲区和十六进制字符串混淆了。crypto.pbkdfSync(...)返回一个缓冲区,有些人会添加一个crypto.pbkdfSync(...).toString('hex'),这会改变数据的大小!十六进制编码(base16编码):十六进制编码是用16个可见字符表示一个二进制数组的十六进制编码。十六进制编码是一种特殊字符(只有2个字符代表一个字节)。编码后,数据大小将增加一倍。具体大小变化原因请参考base64原理。base64:多编码通信的桥梁base64,意思是用64个可见字符表示一个二进制数组,编码后的数据大小变成原来的4/3,即3个字符用4个可见字符表示。当支持本地语言的编码系统打开由另一个编码系统编码的文本时会发生什么?这就是乱码……各国互联网通信之间提供了一种长度短、效率高的编码。原理:Base64要求每三个8Bit字节转换成四个6Bit字节(38=46=24),然后在6Bit上加上两个高位0,组成四个8Bit字节,即转换后的字符串理论上会是1/3比原来的长。这种编码规则:①把3个字节变成4个字节。②每76个字符加一个换行符。③Thefinalterminatorshouldalsobeprocessed.转换前11111111,11111111,11111111(二进制)Base64编码转换后00111111,00111111,00111111,00111111(二进制)然后参考base64表:计算过程:转换前10101101,10111010,01110110转换后00101011,00011011,00101001,00110110十进制43274154(先转为十进制!)对应码表中的值rbp2ASCII码:为了更易读Hex编码和base64编码都不错,但是有个问题:开电脑里的一个文件,满眼都是十个十六进制数,好庞大……十六进制在表示文字方面还是不太擅长。你能创建一个方法来表示键盘输入的所有英文字符和符号吗?不能用键盘输入的字符,如回车或占位符,用特殊符号表示。ASCII诞生了。Unicode和ASCII的区别ASCII编码是1个字节,而Unicode编码通常是2个字节。字母A的ASCII编码十进制为65,二进制为01000001;而在Unicode中,只需要在前面加0,即:0000000001000001。新问题:如果统一成Unicode编码,乱码问题从此消失。但是,如果你写的文字基本都是英文的话,使用Unicode编码需要的存储空间是ASCII编码的两倍,无论从存储还是传输上都是非常不经济的。UTF-8:解决英语以外的语言Unicode当然是一本很厚的字典,记录了世界上所有字符对应的一个数字。UTF-8是目前互联网上使用最广泛的Unicode编码方式。这种编码也称为通用代码。顾名思义,它支持包括简体中文、繁体中文、日文、韩文在内的多种语言的编码。JavaScript操作二进制数据的接口。这些对象存在已久,属于独立规范。ES6将它们合并到ECMAScript规范中并添加了新方法。这些对象的最初设计目的与WebGL项目有关。所谓WebGL就是指浏览器与显卡之间的通信接口。为了满足JavaScript与显卡之间大量的实时数据交换,它们之间的数据通信必须是二进制的,而不是传统的文本格式。以文本格式传递一个32位整数,两端的JavaScript脚本和显卡都要进行格式转换,会非常耗时。这时候如果有一种机制可以像C语言一样直接操作字节,将4个字节的32位整数以二进制的形式发送给显卡,脚本的性能会得到很大的提升。二进制数组就是在这样的背景下诞生的。它与C语言的数组非常相似,允许开发者以数组下标的形式直接操作内存,大大增强了JavaScript处理二进制数据的能力,使得开发者可以与原生接口进行二进制通信操作系统通过JavaScript。1、TypedArray(类型化数组):用于生成类内存数组视图(view),通过9个构造函数,可以生成9种数据格式的视图,如Uint8Array(无符号8位整数)数组视图,Int16Array(16位integer)数组视图,Float32Array(32位浮点数)数组视图等。2.ArrayBuffer:表示内存中的一段二进制数据,可以通过“视图”进行操作。“视图”实现了数组接口,也就是说可以用数组的方法来操作内存。3.DataView对象:用于生成内存的视图,可以自定义格式和字节顺序。比如第一个字节是Uint8(无符号8位整数),第二个字节是Int16(16位整数),第三个字节是Float32(32位浮点数)等等。由于两个视图对应同一段内存,一个视图修改底层内存会影响另一个视图总结:Buffer约等于Uint8Array,因为Buffer是继承Uint8Array实现的(Uint8Array是九种TypedArray视图之一)。而ArrayBuffer就是这些内存块,直接存放二进制数据。例如,如果一个ArrayBuffer就像一个标本,而这些视图就像一个显微镜载物台,你可以看到(读取)这个ArrayBuffer但你需要这些TypedArray(或DataView)视图来操作数据。