首页 > 其他分享 >二进制编码

二进制编码

时间:2023-08-27 15:44:37浏览次数:40  
标签:表示 编码 计算机 二进制 指令 寄存器

计算机内部所有信息(包括指令、数据等)都以二进制的形式存储和处理。

数据

在计算机中,所有数据都是以二进制的形式表示的。以下是不同类型数据的二进制表示方式的一些例子:

  1. 整数
  • 无符号整数:直接使用二进制表示数字的值。

    例如:5 在8位二进制中表示为 00000101

  • 有符号整数(通常使用补码表示):

    • 正数:与无符号相同。
    • 负数:取其正数的二进制表示,然后反转所有位(取反)并加1。
      例如:-5 的8位二进制补码表示为 11111011
  1. 浮点数:使用IEEE 754标准来表示。

    例如:数字 0.15625 在单精度IEEE 754浮点表示中为 00111110001000000000000000000000

  2. 字符:字符常使用ASCII码或其他编码如Unicode进行表示。

    例如:字符 'A' 在ASCII中的表示为 01000001

  3. 布尔值

    • True 通常表示为 1
    • False 通常表示为 0
  4. 颜色:在计算机图形中,颜色通常使用RGB(红绿蓝)模式表示。每种颜色通常使用8位二进制数(一个字节)表示,取值范围为0-255。
    例如:红色可以表示为 11111111 00000000 00000000,即红色值为255,绿色和蓝色值都为0。

  5. 图像和音频:它们通常由一系列二进制数表示,这些二进制数对应于图像的像素值或音频的采样值。

总之,所有的计算机数据都可以表示为二进制形式,不同类型的数据可能会有不同的编码和格式规范。

指令

在计算机中,指令是以二进制编码的形式表示的。这种编码指示了CPU应该执行的特定操作,以及涉及的操作数或寄存器。具体的二进制格式取决于特定的指令集架构(ISA)。

为了解释这一点,让我们考虑一个简化的虚构例子。假设我们有一个简单的ISA,其中只有以下四个指令:

  • LOAD:从内存加载数据到寄存器
  • STORE:将数据从寄存器存储到内存
  • ADD:将两个寄存器的值相加并存储结果
  • SUB:从一个寄存器中减去另一个寄存器的值

对于这个简化的ISA,我们可以为每个指令分配一个二进制编码:

LOAD  ->  00
STORE ->  01
ADD   ->  10
SUB   ->  11

然后,为简化,假设我们只有两个寄存器,R0和R1,它们可以这样编码:

R0 -> 00
R1 -> 01

现在,如果我们要编写一个指令LOAD R0, [address](意思是从某个内存地址加载数据到R0),它可以这样编码:

指令  寄存器   内存地址
------------------------
 00      00    [address的二进制表示]

以同样的方式,ADD R0, R1可以表示为:

指令  寄存器1  寄存器2
------------------------
 10      00       01

这只是一个简化的示例,实际的ISA(如x86, ARM等)会有更多的指令、更复杂的编码规则和多个寄存器。

这种表示方法的优点是机器可以非常快速地识别和执行二进制指令,但是对于人类来说,直接处理这些二进制代码是不方便的,因此我们通常使用汇编语言作为中间表示形式,然后使用汇编程序将汇编代码转换为机器代码(即二进制指令)。

实现

计算机的基本电子元件(例如晶体管)有两种状态:开或关,这可以很自然地映射为二进制系统中的0和1。

下面通过发射极接地时的开关工作来介绍起到开关作用的晶体管。

  • 当晶体管的基极引脚被施加电压(约0.7V以上)并流过微小电流时,晶体管会导通,电流会在集电极和发射极之间流动。
  • 反之,当施加到基极引脚的电压较低(约0.7V以下)时,集电极和发射极处于关断状态,电流不流动。

晶体管的开关工作就像使用基极作为开关来打开和关闭从集电极流向发射极的电流。

基于晶体管的开关特征,最早的计算机就是基于它来构建的。

图:1953 年 11 月 16 日,在英国曼彻斯特大学汤姆·基尔伯恩 (Tom Kilburn) 的带领下,理查德·格里姆斯代尔 (Richard Grimsdale) 和道格拉斯·韦伯 (Douglas Webb) 展示了晶体管计算机原型“曼彻斯特 TC”。这台 48 位机器使用了 92 个点接触晶体管和 550 个二极管。
https://www.computerhistory.org/timeline/1953/#169ebbe2ad45559efbc6eb35720bfc24

计算机通讯

网络上的通信也都是基于二进制数据的。

以太网传输:

当你的计算机通过以太网发送数据时,数据被分割成多个数据包。每个数据包都包含源地址、目标地址和其他信息。

这些地址和数据都被转换成二进制形式。例如,一个IP地址如192.168.1.1会被转换为二进制形式的“11000000.10101000.00000001.00000001”。
数据包在网络上以电信号或光信号的形式传输,这些信号在物理层面对应于二进制的0和1。

无线通信:

当你使用Wi-Fi或蜂窝网络时,数据也是以二进制的形式进行传输的。

在无线通信中,二进制数据通常被转换为射频(RF)信号。例如,在Wi-Fi通讯中,1可能表示一个特定的射频波形,而0表示另一个波形。

总结

二进制是计算机的基础,因为它为计算机提供了一个简单、有效和可靠的方式来存储、处理和传输数据。

基本工作原理:计算机的硬件组件(特别是其基本元件如晶体管)在物理层面上有两种状态:开或关、高电压或低电压。这两种状态可以用二进制中的0和1来表示,因此,使用二进制系统来表示计算机中的数据和指令是很自然的。

存储和表示数据:在计算机内部,所有的数据(包括文字、图像、声音等)都被转化为二进制形式进行存储和处理。例如,字母“A”在ASCII编码中被表示为“01000001”。

计算和逻辑操作:计算机中的算术和逻辑运算(如加、减、与、或、非等)都是在二进制形式的数据上进行的。二进制也使得实现这些操作变得简单和高效。

编程和软件:计算机的指令集和机器语言都基于二进制。高级编程语言编写的程序在执行之前会被转换为二进制的机器码,以便计算机能够理解和执行。

通信:当数据在网络中传输或在设备之间进行通信时,数据通常会被转化为二进制形式。

标签:表示,编码,计算机,二进制,指令,寄存器
From: https://www.cnblogs.com/ghj1976/p/binary.html

相关文章

  • 12、从0到1实现SECS协议之SECS-I协议编码与解码
    12、从0到1实现SECS协议之SECS-I协议编码与解码1、SECS-I协议编码与解码实现这个感觉没有啥特别好说的,根据协议慢慢理解就好了,代码实现如下:packagepacketsimport( "encoding/binary" "fmt")/*------------------------------------- secs头-----------------------......
  • 哈夫曼树及哈夫曼编码 C++代码实现
     /*哈夫曼编码*/#include<iostream>usingnamespacestd;//********************************//构造哈夫曼树//********************************/*哈夫曼树顺序表的定义*/typedefstruct{intweight;intparent,lchild,rchild;}HTNode;typedefH......
  • promethus二进制文件安装脚本
    #!/bin/bashuseradd-M-r-s/bin/falseprometheusmkdir/etc/prometheus/var/lib/prometheustarxfprometheus-*.tar.gz&&cdprometheus-*cp./{prometheus,promtool}/usr/local/bin/cp-r./{consoles,console_libraries}/etc/prometheus/cp./promet......
  • 二进制转布莱叶盲文转义
    输入s二进制数据TYPE_HEX=0TYPE_ASCII=1TYPE_BINARY=2TYPE_BRAILLE=3withopen('lookup_table.txt','r')asf:rows=f.read().splitlines()table=list(map(lambdax:x.split('\t'),rows))defconvert(text_array,in_t......
  • 剑指Offer 15. 二进制中1的个数
    题目链接:剑指Offer15.二进制中1的个数题目描述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量).)。解法思路:思路一:num依次右移,判断每一次移动后最后一位是否是1,是的话,就ans++代码:func(numuint32)int{......
  • 二进制生成二维码
    由一串二进制数字生成一张二维码图片fromPILimportImagefromzxingimportBarCodeReaderreader=BarCodeReader()MAX=70pic=Image.new("RGB",(MAX,MAX))binary_nums="""此处放二进制""".replace('\n','')i=0......
  • PXC 57 二进制安装
    1.准备阶段1.1在三个节点上分别创建:用户组用户组目录--用户组用户组#/usr/sbin/groupaddmysql#/usr/sbin/useradd-gmysqlmysql--目录#mkdir–p/usr/local/mysql#chown-Rmysql:mysql/usr/local/mysql#chmod-R755/usr/local/......
  • 二进制
    二进制给定一个长度为$N$的二进制串($01$串)以及一个正整数$K$。按照从左到右的顺序,依次遍历给定二进制串的$N-K+1$个长度为$K$的子串,并计算每个遍历子串的各位数字之和。将这$N-K+1$个子串数字和按照子串的遍历顺序进行排列,得到的序列就是给定二进制串的$\texttt{K-}......
  • 【算法记录】Java - Base64编码解码源码
    Base64编码表索引对应字符索引对应字符索引对应字符索引对应字符0A17R34i51z1B18S35j5202C19T36k5313D20U37l5424E21V38m5535F22W39n5646G23X40o5757H24Y41p5868I25Z42q5......
  • 【Java复杂系统实战经验-2023-08月】Java基础,Path路径计算编码
    Java程序设计-个人月报-2023-08月背景在本月,给负责的项目做了一次文件存储的迁移工作。历史原因,开发阶段由于图简便,使用了本地文件存储。后面经过容器化上云,导致应用出现上传文件分发的多节点的问题。本项工作的经验,受益于Java基础Path的一些API,颇有收获。复杂的系统应当构......