【发布时间】:2011-06-26 13:38:06
【问题描述】:
为什么一个字节的范围只有 0 到 255?
【问题讨论】:
-
我认为这个问题的核心是为什么它会变为 255 而不是 256,答案是它确实包含 256 个值,它只是从零开始
为什么一个字节的范围只有 0 到 255?
【问题讨论】:
严格来说,术语“字节”实际上可以指代一个具有 256 个值以外的单位。这只是几乎通用的尺寸。来自Wikipedia:
从历史上看,一个字节是 用于编码单个字符的位 在计算机中的文本,它是 这个原因基本可寻址 许多计算机中的元素 架构。
字节的大小历来 依赖于硬件并且没有 存在明确的标准 授权大小。事实上的 八位标准是一种方便 允许值 0 的 2 的幂 通过 255 为一个字节。多种类型 的应用程序使用变量 可以用八位或更少的位表示, 和处理器设计人员优化 这种常见的用法。的受欢迎程度 主要商业计算 架构有助于 普遍接受 8 位 尺寸。八位字节被定义为 明确表示一个 8 位序列 因为相关的歧义 使用术语字节。
具有讽刺意味的是,如今“单个字符”的大小在大多数情况下不再考虑单个字节......最常见的是,“字符”的概念与 Unicode 相关联,其中字符可以用不同格式的数量,但通常是 16 位或 32 位。
对于使用 UCS-4/UTF-32(Unicode 的直接 32 位表示)的系统将 32 位指定为一个字节会很有趣。造成的混乱将是惊人的。
但是,假设我们将“byte”作为“octet”的同义词,则有八个独立的bits,每个bits可以是on或off,true或false,1或0,但你想怎么想它。这导致 256 个可能的值,通常编号为 0 到 255。(但情况并非总是如此。例如,Java 的设计者不幸决定将字节视为 -128 范围内的 有符号 整数到 127。)
【讨论】:
char 作为字节类型,这意味着 char 不是字符。
char 甚至 Character 数据类型不能容纳字符。那是因为他们搞砸了抽象的概念字符,将高级字符与低级序列化方案混淆。然后雪上加霜,Java 还以所有可能的序列化表示中最丑陋的方式诅咒人们永远意识到错误或被错误困扰。真是一团糟!
int 是新的 char。最近在一个 Scala 邮件列表上对此进行了广泛的讨论,其中有人抱怨 Scala 的 String 与 Java 的 String 相同,因此仍然将所有这些错误保留在专门设计为“更好的 Java”的语言。即使您不关心 Scala 和/或 Java,整篇文章都非常适合阅读。
因为byte,按照其标准定义,是 8 位,可以表示 256 个值(0 到 255)。
【讨论】:
为什么一个字节的范围只有 0 到 255?
没有。
octet 有 8 位,因此允许 28 种可能性。 byte 定义不明确。不应将这两个术语等同起来,因为它们不能完全互换。此外,仅支持带符号字符的邪恶编程语言(ʏᴏᴜ ᴋɴᴏw ᴡʜᴏ ʏᴏᴜ ᴀʀᴇ﹗)只能表示值 -128 到 127,而不是 0 到 255。
大多数但不是所有现代机器都有 8 位字节,但这是一个相对较新的现象。当然并不总是这样。许多非常早期的计算机都有 4 位字节,而 6 位字节曾经很常见,甚至在最近也是如此。这两种类型的字节所包含的值都比 255 少。
那些 6 位字节可能非常方便,因为字长为 36 位,六个这样的字节完全适合这些 36 位字之一,没有任何抖动。这对于持有Fieldata 非常有用,非常流行的Sperry ᴜɴɪᴠᴀᴄ 计算机使用它。您只能将 4 个 ᴀsᴄɪɪ 字符放入 36 位单词中,而不是 6 个 Fieldata。当我还是一名本科生时,我们在计算中心有 1100 系列,但即使是现代的 2200 系列也是如此。
ᴀsᴄɪɪ——过去是并且是只有 7 位而不是 8 位代码——为打破那个世界铺平了道路。 ɪʙᴍ 360 的重要性不应被低估,无论它们是否包含 ᴀsᴄɪɪ,它都有 8 位字节。
尽管如此,许多机器长期支持ᴅᴇᴄ’s Radix‑50。这是一个 40 个字符的曲目,其中三个字符可以在两种不同的编码方案下有效地打包成一个 16 位的单词。我在大学期间使用了大量的 ᴅᴇᴄ ᴘᴅᴘ‑11s 和 Vaxen,而 Rad‑50 只是生活中的一个事实,一个必须适应的现实。
【讨论】:
一个字节有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 X 128, 1 X 64,1 X 32 等,总共 255 最小为 0
【讨论】:
你错了!一个字节的范围从 0 到 63 或从 0 到 99!
你相信God吗?大神在Holy Bible说。
信息的基本单位是一个字节。每个字节包含未指定数量的信息,但它必须能够保存至少 64 个不同的值。也就是说,我们知道 0 到 63 之间的任何数字都可以包含在一个字节中。此外,每个字节最多包含 100 个不同的值。因此,在二进制计算机上,一个字节必须由六位组成;在十进制计算机上,我们每个字节有两个数字。* - 计算机编程艺术,第 1 卷,由 Donald Knuth 撰写。
还有……
* 自 1975 年左右以来,“字节”一词已经开始表示精确的八位二进制数字序列,能够表示数字 0 到 255。因此,现实世界的字节大于假设的 MIX 机器的字节数;事实上,MIX 的老式字节只比 nybbles 大一点。当我们谈到与 MIX 相关的字节时,我们将把自己限制在这个词的前一个含义上,回到字节还没有标准化的时代。 - 计算机编程艺术,第 1 卷,由 Donald Knuth 撰写。
:-)
【讨论】:
一个字节只有 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 的数字更有意义。:)
【讨论】:
我会注意到,在 PDP-10 系列计算机上,一个字节是一个可变长度的结构,由一个“字节指针”定义,它定义了位数以及从存储开始的偏移量区域。然后有一组处理字节指针的机器指令,包括:
事实上,“字节”就是我们今天所说的位域。使用字节指针来表示一系列相同大小的字节中的下一个只是它的一种用途。
使用的一些字符集是“sixbit”(仅大写,6 个字节到一个 36 位字),ASCII(大小写,五个字节到一个字,还有一点剩余) ,并且很少使用 EBCDIC(IBM 字符集,每个字使用四个八位字节,浪费了每个字四个位未使用)。
【讨论】:
ldb 和 dpb 的函数,Hyperspec 文档将两者的名称归于 PDP-10 汇编语言:lispworks.com/documentation/HyperSpec/Body/f_dpb.htm。
严格来说,不会。
在大多数现代系统上,一个字节是 8 个二进制位,但在某些系统上并非总是如此(许多旧计算机使用 7 位来表示 ASCII 字符(也称为字节),而穿孔卡系统通常基于 6-位字符(又名字节),例如)。
如果您说的是 8 位字节,它可以表示您希望的任何范围。但是,它只能表示 256 个不同的值,因此它通常用于表示 0..255(“无符号字节”)或 -128..+127(“有符号字节”)。 p>
【讨论】: