计算机硬盘驱动器上的十六进制格式和存储:它存储的字节数是否为一半?

J. *_* J. 4 storage hard-drive hexadecimal

请允许我先声明我不是计算机专家。最重要的是,我对这些信息感到好奇。

在与计算机科学专家的对话中,我被告知,使用十六进制系统可以将一串十进制数值(例如 73829182093)存储在仅占用所需字节一半的硬盘驱动器上。正如专家所说,一串六个十进制数字可以存储为3个字节,因为每个数字都可以用一个只有4位大小的十六进制数字表示。关于硬盘驱动器上的存储,这是否正确?请注意,我指的是硬盘驱动器上的存储,而不是显示所需的内存。

我之前的理解是,所有信息都以二进制形式(0 和 1)存储在硬盘驱动器上,而在现代计算机硬盘驱动器中则以 8 位块存储。并且该十六进制用于促进信息的显示,因此不需要人类阅读长的位块。

如果这是真的,这是否意味着在给定的情况下,在十六进制存储下,硬盘驱动器上的 8 位块将改为编码两个半字节的数据,而不是一个字符的 8 个完整位,像字母“M”?或者在硬盘驱动器上,半字节实际上是用完整的 8 位表示的,然后在显示时只是省略了?

谢谢你。

all*_*tic 5

我之前的理解是,所有信息都以二进制形式(0 和 1)存储在硬盘上,而在现代计算机硬盘中则以 8 位块存储。并且该十六进制用于促进信息的显示,因此不需要人类阅读长的位块。

那是 100% 正确的。十六进制只是数据的一种表示;与其他格式相比,十六进制的性质没有什么特别之处。它不启用数据压缩或类似的东西。

我认为您的朋友所指的是将数字表示为字符串将数字表示为 numbers之间的区别。

对于无符号整数 - 它是从 0 到某个固定的最大数的位(零和一)数字的表示 - 可以由 N 位表示的最大数是 2^N,减去 1,假设您从 0 开始。

因此,如果您有 8 位(也就是 1 个字节),则可以表示从 0 到 255 的每个数字而不会丢失信息;您可以在 0 到 1 之间操作这八位,以明确表示从 0 到 255(包括 0 到 255)的每个数字。或者从 1 到 256,如果您愿意。没关系。不过,计算机倾向于从 0 开始表示它们。

如果您有 16 位(2 个字节),则可以表示从 0 到 65535(即 2^16 - 1)的每个数字。32 位,每个数字从 0 到 4294967295。64 位,每个数字从 0 到 1.8 和19 个零的数字

你可能从代数中知道 2^N 是一个指数函数。这意味着,尽管64位是唯一的八倍以上位8位,它可以存储方式,途径,方式在8倍,更比的比特数更多的数据255*8(这是只有2040!)。与大约 180000000000000000000 相比,2040 是一个非常小的数字。64 位可以存储从 0 一直到最大值的每个数字。

以这种方式存储整数的一个有趣含义是,程序员必须事先决定需要多大的存储空间,这反过来又决定了可以由给定整数表示的最大数量。如果您尝试存储一个比存储容量更大的数字,您会得到一个叫做overflow 的东西。例如,如果您有一个 8 位整数,将其设置为 255,并且您要求计算机将其加 1,则会发生这种情况。好吧,您不能在范围为 0 到 255 的整数中表示 256!通常发生的是它“环绕”回到开始,然后回到 0。

还有在一个名为“任意精度”模式下执行的数学程序,自动调整其存储增长越来越大的依赖于有多大的数字被处理的; 例如,如果您将 255 乘以 100000,答案将必须增长到超过 8 位和超过 16 位,但将适合 32 位整数。如果您输入的数字或执行的数学运算产生的数字大于 64 位整数的最大值,则必须为其分配更多空间。


但是——如果您将数字表示为字符串,那么每个数字将占用与书面散文中的字母一样多的空间。“ASDF”和“1234”占据完全相同的空间。“OneTwoThreeFourFive”(19 个字符)与“1234567890123456789”占用相同的空间。所需的空间量随着您拥有的数字(或字母或字符)数量线性增长。那是因为每个字符都可以代表字符集中的无数字符中的任何一个,而数字只是字符集中的字符。特定的 0 和 1 序列将产生数字“3”,不同的序列将产生“4”,

通常字符存储占用 8 位或 16 位,但某些字符编码要么根据字符占用可变数量的位(如 UTF-8),要么总是占用更多的位(如 UCS-32) .

如果每个字符占 8 位,“OneTwoThreeFourFive”和“1234567890123456789”都占 152 位。但是 "1234567890123456789" 可以容纳在64 位无符号整数内,它……只消耗64 位。这节省了 88 位!我们甚至没有使用任何“数据压缩”技巧,如 Zip、7-Zip、RAR 等。