类型化数组

2024-02-06 14:28
文章标签 数组 类型化

本文主要是介绍类型化数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数字存储前置知识

  1. 计算机必须使用固定的位数来存储数字,无论存储的数字是大是小,在内存中占用的空间是固定的
  2. n位的无符号整数能表示的个数是2^n个 取值范围是0~2^n-1 举例:000 001 ···111 表示[0-8]
  3. n位的有符号整数能表示的个数是2^n个 取值范围是-2^(n-1)~2^(n-1)-1   举例:000 001 ··· 111 第一位数字表示正负号 因此表示[-4-3]
  4. 浮点数表示法 可以用于表示整数和小数,目前分为两种标准
  • 32位浮点数:单精度浮点数,用1位表示符号,8位表示阶码(指数 eg:10^n),23位表示尾数
  • 64位浮点数:双精度浮点数,用1位表示符号,11位表示阶码,52位表示尾数

     5. JS中所有数字,均使用双精度浮点数保存

类型化数组:用于优化多个数字的存储

  • Int8Array:8位有符号整数,长度1个字节。(-128-127)
  • Uint8Array:8位无符号整数,长度1个字节。(0-255)还有一种类型 Uint8ClampedArray
  • Int16Array:16位有符号整数,长度2个字节。
  • Uint16Array:16位无符号整数,长度2个字节。
  • Int32Array:32位有符号整数,长度4个字节。
  • Uint32Array:32位无符号整数,长度4个字节。
  • Float32Array:32位浮点数,长度4个字节。
  • Float64Array:64位浮点数,长度8个字节。

使用方法跟普通数组一致 但是:

不能增加和删除数据,类型化数组的长度固定

一些返回数组的方法,返回的数组是同类型化的新数组

 基础概念可参考以下连接

ECMAScript 6 入门:ArrayBuffer_js arraybuffer 赋值-CSDN博客

ArrayBuffer

一个对象,用于存储一块固定内存大小的数据

1.创建了一个用于存储10个字节的内存空间

const buff = new ArrayBuffer(10)
console.log(buff)
const buff2 = buff.slice()
console.log(buff2)
const buff3 = buff.slice(3, 5)
console.log(buff3)

 2.创建dataview视图指向该内存区域

const view = new DataView(buff, 3, 4)
console.log(view)

3.set 写入 get  读取

arg1 偏移量 arg2值

view.setInt8(1, 3)
const a = view.getInt8(1)
console.log("查询偏移位置为1的数据:", a)
console.log(view)

4.使用DataView 

通常在需要混用多种存储格式时使用DataView

5.使用类型化数组操作

const buff = new ArrayBuffer(10)//10个字节的内存
const arr = new Int16Array(buff)
arr[0] = 2344//操作了2个字节
console.log(arr)

6.彩色图片转成黑白

<img src="./assets/dog.png" alt="" width="250" height="250" />
<button onclick="change()">转换</button>
<canvas height="250" width="250" id="cvs"></canvas>
//把一个图像变成黑白,设置红绿蓝平均数即可
function change () {const img = document.querySelector('img')const cvs = document.getElementById('cvs').getContext('2d')cvs.drawImage(img, 0, 0)const imageData = cvs.getImageData(0, 0, img.width, img.height)const data = imageData.datafor (let i = 0; i < data.length; i += 4) {const red = imageData.data[i]const green = imageData.data[i + 1]const blue = imageData.data[i + 2]const avg = (red + green + blue) / 3data[i] = data[i + 1] = data[i + 2] = red}cvs.putImageData(imageData, 0, 0)
}

这篇关于类型化数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/684595

相关文章

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu 1166 敌兵布阵(树状数组 or 线段树)

题意是求一个线段的和,在线段上可以进行加减的修改。 树状数组的模板题。 代码: #include <stdio.h>#include <string.h>const int maxn = 50000 + 1;int c[maxn];int n;int lowbit(int x){return x & -x;}void add(int x, int num){while