字节到底是什么,它和二进制又有什么关系

本文关键字:二进制 什么 关系 是什么 字节 | 更新日期: 2023-09-27 18:15:15

我正在学习二进制和字节。我知道8位组成一个字节,一个字节可以有256种可能。我感到困惑的是:

byte[] b = new byte[] { 85, 85, 67, 75 };

85或上面的任何数字与二进制有什么关系?在我的脑海中,有些东西没有完全敲击。

字节到底是什么,它和二进制又有什么关系

二进制是计算机内部的存储方式。1和0,开和关,真和假,有或没有电流。这篇维基百科文章对它进行了相当彻底的处理。

在您的示例中,像"85"这样的表示是如何将字节格式化以方便我们作为人类读者。它可以用十六进制(以16为基数)格式化为"55",用八进制(以8为基数)格式化为二进制中的"125"为"1010101",如果你愿意的话,甚至可以用84为基数的"11"。都是同一个意思。

85只是一个小数。(以10为基数)数字的位置表示法。它的意思是:

8*10^1 + 5*10^0

= 8*10 + 5*1

= 80 + 5

= 85

但是,您可以选择任何基数来表示数字。我们人类有10根手指,这可能是日常使用的"10进制"系统的起源,但在计算机的物理电路中没有办法表示10个不同的数字。这个电路只理解电子的缺乏和电子的存在-即只有两位数字,因此是二进制系统。

因此,虽然您可以在程序源代码中编写十进制85(以使其对人类更自然),但它最终在计算机中被表示为二进制1010101,等于…

2

1 * ^ 6 + 0 * 2 ^ 5 + 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0

= 1 * 64 + 0 * 32 + 1 * 16 * 8 + 0 + 1 * 4 + 0 * 2 + 1 * 1

= 64 + 16 + 4 + 1

= 85


顺便说一句,十进制系统不与二进制"对齐"-单个十进制数字不能由二进制数字的"整数"表示,而十进制的四舍五入数字不能很好地匹配二进制的四舍五入数字。例如:

    10(十进制)= 1010(二进制)
  • 100(十进制)= 1100100(二进制)
  • 1000(十进制)= 1111101000(二进制)
  • 等等…

有时,使用与二进制"对齐"的数字系统是方便的,例如八进制(一个八进制数字正好是3个二进制数字)或十六进制(一个十六进制数字正好是4个二进制数字)。

重要的是,所有这些系统最终都在计算机中被表示为二进制。

边注:"十六进制"过去是"sexa-decimal",但显然冒犯了一些清教徒的敏感性;)

一个字节在c#中只是一个8位整数值。在上面的例子中,你在一个数组中表示4个数字——这和你使用int没有什么不同,除了这些数字占用了内存中总空间的1/4。

它实际上与"二进制"无关-除了它是二进制数据最常用的表示形式。这是因为大多数系统一次处理一个"字节",即一个8位的数据块。因此,如果您正在处理原始二进制信息,那么字节是表示该数据的常用方法。

BitConverter类具有从字节数组转换到其他类型并返回的例程。例如,它可以取4个字节并将其转换为Int32值,或者反过来。记住——所有存储的数据都只是内存——你只是按照特定的顺序保存了一串比特(1和0),系统以特定的方式解释这些数据。

这些只是数字。它们与二进制本身无关。但是,如果您愿意的话,可以将它们写成二进制——例如,以2为基数的75 = 01001011。

这里的

A byte只是一个数据类型,它可以保存256个可能值中的一个。通常,这被解释为从0到255的数字,或8个二进制数字(即8个开/关值)。这只是看待同一事物的两种方式。

该语句声明了一个字节数组,并为其分配了4个元素-每个元素的大小为单个字节(理论上!)实际值(85、86、67、75)存储在该数组中,每个值都可以放入单个字节中。在您的代码示例中,这些值以十进制形式表示。一旦你的代码被翻译成可执行的形式,这些值最终会被你的计算机以它们的二进制表示形式看到,从一个寄存器到另一个寄存器,被推入、弹出和累积等等。

可以在你的源代码中表示其他基数的值-十六进制,或者十六进制,例如,它比十进制更接近金属,相应地允许你的思维过程在人类表示和你的代码实际表达之间轻松移动,因为实际上没有实际的数学在十六进制和二进制之间进行心理转换;另一个很好的例子是八进制。

或者你可以这样想:在你的代码中使用与你正在做的事情最相关的基来表示值。如果你把权限或颜色值放在一起,十六进制或八进制;如果你在计算支票账户的利息,那么很明显的选择是小数。

现在,对于您的特定代码片段-如果您正在处理单个字符或将原始内容写入块设备,字节数组可能就可以了-然而,当您与编译器成为一体时,您的大脑可能最终会认为十六进制更容易处理。

数组中的每一个数字都小于256。它们被转换成二进制的字节。这是它们的十进制表示