数据结构-数字编码

数字编码作为数据结构的一种重要形式,被广泛应用于各个领域,包括通信、图像处理、压缩算法等。本文将深入探讨数字编码的原理、常见的编码方法以及它们的应用。

基础知识

定义

数字编码是一种将数字数据转换为二进制形式的方法,以便计算机能够处理、存储和传输。它在计算机科学和信息技术领域起着重要作用,为数据的表示、压缩、加密以及通信提供了基础。

作用

  1. 数据表示:计算机中的所有数据都以二进制形式表示。通过数字编码,我们可以将各种类型的数据(如整数、浮点数、字符、图像、音频、视频等)转换为二进制形式,使计算机能够理解和处理这些数据
  2. 数据压缩:数字编码可以通过压缩算法将数据表示为更紧凑的形式,以减少存储空间或传输带宽的占用。

二进制表示法

二进制表示法是一种数字编码方法,使用只包含两个数字 0 和 1 的二进制位(bit)来表示数值。它是计算机中最基本、最常用的数字编码方式,也是所有其他数字编码的基础。

在二进制表示法中,每个位置上的数字称为位(bit),位的位置从右往左依次增加,每个位上的数字可以是 0 或 1。每个位所代表的数值是二的幂,从右往左依次递增。

常见的数字编码方法

整数编码

将整数转换为二进制的方法

原码

最简单的整数编码方法,直接将整数的二进制表示作为编码

将数字的二进制表示的最高位视为符号位,其中 0 表示正数,1 表示负数,其余位表示数字的值

反码

正数的反码与其原码相同,负数的反码是对其原码除符号位外的所有位取反

补码

正数的补码与其原码相同,负数的补码是在其反码的基础上加 1

反码作用

  1. 表示负数:在原码表示中,使用最高位(符号位)来表示正负,0 表示正数,1 表示负数。而使用反码表示负数时,只需要将正数的各个位取反(0 变为 1,1 变为 0),而符号位保持不变。
  2. 简化运算:使用反码表示负数可以简化负数的运算。在进行反码运算时,正数和负数的运算可以按照无符号数的运算方式进行,无需特殊处理符号位。负数的运算可以转化为正数的运算,减法可以转化为加法。

举例:1+(-2)可通过反码计算

补码作用

补码在计算机中用于表示有符号整数,其作用是简化负数的表示和运算,同时解决了反码表示的零值问题。

+0和-0表示如下:

在负零的反码基础上加 1 会产生进位,但 byte 类型的长度只有 8 位,因此溢出到第 9 位的 1 会被舍弃。也就是说,负零的补码为 00000000 ,与正零的补码相同。这意味着在补码表示中只存在一个零,正负零歧义从而得到解决。

浮点数编码

前期写过为啥浮点数不准确的文档,具体可查看:float为啥不准确

float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算,float 可表示的最大正数为 2^(254−127)×(2−2^(−23))≈3.4×10^38 ,切换符号位便可得到最小负数。

尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度double也是类似

参考

1.3.3 数字编码

相关推荐
计算机小白一个3 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^3 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
大数据追光猿5 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
Dream it possible!6 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
夏末秋也凉6 小时前
力扣-回溯-46 全排列
数据结构·算法·leetcode
南宫生6 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴6 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
Leuanghing6 小时前
【Leetcode】11. 盛最多水的容器
python·算法·leetcode
qy发大财6 小时前
加油站(力扣134)
算法·leetcode·职场和发展
王老师青少年编程6 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛