为什么一个字节只有0到255?

时间:2011-02-13 19:55:18

标签: binary byte

为什么一个字节的范围只有0到255?

8 个答案:

答案 0 :(得分:51)

严格地说,术语“字节”实际上可以指具有256个值以外的单位。只是那个几乎是通用的大小。来自Wikipedia

  

历史上,一个字节是数字   用于编码单个字符的位   在计算机中的文本,它是为   这个原因基本可寻址   许多计算机中的元素   架构。

     

历史上字节的大小   是硬件依赖,没有   存在明确的标准   要求规模。事实上   八位标准很方便   允许值为0的两个幂   一个字节通过255。很多类型   应用程序使用变量   可表示为八位或更少位,   和处理器设计师优化   这种常见用法。人气的普及   主要商业计算   建筑有助于   无处不在的接受8位   尺寸。术语八位组被定义为   明确表示8位序列   因为模糊相关   用字节。

具有讽刺意味的是,现在大多数情况下“单个字符”的大小不再被视为单个字节...最常见的是,“字符”的概念与Unicode相关联,其中字符可以表示为不同格式的数量,但通常为16位或32位。

对于使用UCS-4 / UTF-32(Unicode的直接32位表示)将32位指定为字节的系统来说,这将是有趣的。引起的混乱将是惊人的。

然而,假设我们将“byte”作为“octet”的同义词,有八个独立的bits,每个都可以打开或关闭,true或false,1或0,但是你希望想一想。这导致了256个可能的值,通常编号为0到255.(但情况并非总是如此。例如,Java的设计者不幸决定将字节视为 signed 整数,范围为-128到127。)

答案 1 :(得分:25)

因为byte的标准定义是8位,可以表示256个值(0到255)。

答案 2 :(得分:23)

字节≠Octet

  

为什么一个字节的范围只有0到255?

没有。

octet 有8位,因此允许2 8 的可能性。 字节定义不明确。人们不应该把这两个术语等同起来,因为它们不是完全可以互换的。另外,仅支持有符号字符的邪恶编程语言(ʏᴏᴜᴋɴᴏwᴡʜᴏʏᴏᴜᴀʀᴇ!)只能表示-128到127的值,而不是0到255.

Big Iron需要很长时间才能生锈。

大多数但并非所有现代机器都具有8位字节,但这是一个相对较新的现象。当然并非总是如此。许多非常早期的计算机具有4位字节,并且最近甚至比较地使用6位字节。这两种类型的字节都比更少的值保持为255。

这些6位字节可能非常方便,因为字大小为36位,六个这样的字节完全适合这些36位字之一而没有任何跳动。这对于保留非常受欢迎的Fieldata计算机使用的Sperry ᴜɴɪᴠᴀᴄ非常有用。您只能将4ᴀsᴄɪɪ字符放入36位字,而不是6 Fieldata。当我是本科生时,我们在计算中心有1100系列,但即使使用现代2200系列,这仍然是正确的。

输入ASCII

ᴀsᴄɪɪ - 只有7-而不是8位代码 - 为打破这个世界铺平了道路。不应低估ɪʙᴍ 360的重要性,它具有8位字节,无论它们是否保持不变。

然而,许多机器长期支持ᴅᴇᴄ’s Radix‑50。这是一个40个字符的曲目,其中三个字符可以在两种不同的编码方案下有效地打包成单个16位字。在我大学期间,我使用了大量的ᴅᴇᴄᴘᴅᴘ-11s和Vaxen,而Rad-50只是生活中的一个事实,这是一个必须适应的现实。

答案 3 :(得分:6)

你错了!字节范围为0到63或0到99!

你相信God吗?上帝在Holy Bible中说。

  

信息的基本单位是一个字节。每个字节包含未指定数量的信息,但它必须能够保存至少64个不同的值。也就是说,我们知道0到63之间的任何数字(包括0和63)都可以包含在一个字节中。此外,每个字节包含最多100个不同的值。因此,在二进制计算机上,字节必须由6位组成;在十进制计算机上,我们每字节有两位数。*        - 计算机程序设计的艺术,第1卷,由Donald Knuth编写。

和...

  

* 自1975年左右以来,“字节”一词意味着一个精确的八位二进制数字序列,能够表示0到255的数字。因此,实际字节大于假设的MIX机器的字节;实际上,MIX的旧式字节只比nybbles大得多。当我们谈到与MIX有关的字节时,我们将自己局限于前一个词的意义,回到字节尚未标准化的日子。        - 计算机程序设计的艺术,第1卷,由Donald Knuth编写。

: - )

答案 4 :(得分:6)

字节有8位(8 1或0)01000111 = 71

每个位代表一个值, 1,2,4,8,16,32,64,128但是从右到左?

例如

128, 64, 32, 16, 8, 4, 2, 1,
0    1   0   0   0  1  1  1 =71
1    1   1   1   1  1  1  1 = max 255
0    0   0   0   0  0  0  0 = min 0

使用二进制1或0和仅8位(1字节)我们只能

每个值中的1个1 X 128,1 x 64,1 X 32等,最多总计255 最小0

答案 5 :(得分:5)

一个字节只有8位。一位是二进制数字。所以一个字节可以容纳2(二进制)^ 8个数字,范围从0到2 ^ 8-1 = 255.

这与询问为什么3位十进制数可以表示0到999的值相同,以相同的方式回答(10 ^ 3 - 1)。

最初字节并不总是8位。它们代表了“一对”位,也可能是6位,7位或9位。这是后来标准化的,由于计算机的二元性质,使这些单位成为2的幂是有意义的。因此出现了半字节(4位或半字节)和8位字节。

[编辑] 这也是八进制和十六进制编号变得流行的原因。一个八进制数表示3位,一个十六进制数表示4位。因此,数字十六进制数字可以恰好代表一个字节。从0到0xFF的数字比从0到255的数字更有意义。:)

答案 6 :(得分:3)

严格地说,它没有。

在大多数现代系统中,一个字节是8个二进制位,但在某些系统上并非总是如此(许多旧计算机使用7位来表示ASCII字符(也称为字节),而穿孔卡系统通常基于6-比特字符(又名字节),例如)。

如果你在谈论一个8位字节,这可以代表你想要的任何范围。但是,它只能表示 256个不同的值,因此它通常用于表示0..255(“无符号字节”)或-128 .. + 127(“有符号字节”)。

答案 7 :(得分:3)

我会注意到在PDP-10系列计算机上,一个字节是一个可变长度结构,由一个“字节指针”定义,它定义了位数以及从存储开始的偏移量区域。然后有一组处理字节指针的机器指令,包括:

  • LDB - 加载字节
  • DPB - 存款字节
  • ILDB - 递增指针,然后加载字节
  • IDPB - 递增指针,然后是存储字节(希望我把这个弄好 - 感觉不对)

事实上,“字节”就是我们今天所称的字段。使用字节指针来表示相同大小的一系列字节中的下一个只是其用途之一。

使用的一些字符集是“sixbit”(仅大写,6位字节到36位字),ASCII(大写和小写,一个字为5个字节,剩下一点) ,并且很少使用EBCDIC(IBM字符集,每个字使用4个8位字节,浪费掉每个字未使用的4位)。