我正在编写一个游戏服务器,这可能是一个简单的问题,但我只是想澄清一下。
为什么一个字节(char 或 unsigned char)最多可以容纳 255(0xFF,我认为是 2 个字节)的值?当我使用 sizeof(unsigned char)
时,编译器告诉我它是 1 个字节。
是因为(在 ACSII 中)它正在“转换”为字符吗?
抱歉,我的解释很糟糕,我不太擅长描述问题。
最佳答案
这涉及一系列主题,包括字节的历史意义、字符的 C 定义和数学。
对于初学者来说,一个字节在历史上有很多含义,但现在我们几乎总是指一个八位字节,即 8 位。作为文字游戏,还有 nybble(或通常是 nibble),它是半个字节(不称为 bite)。
数学告诉我们,8 1-or-0
的有序组合值,我们得到 2<sup>8</sup> = 256
组合。有时我们使用这个无符号的,有时有符号的,但无论哪种方式,我们都希望范围内有 0;所以无符号范围是0..255
.对于带符号的范围,我们有 more options , 其中 two's complement是最受欢迎的;在这种情况下,对于 -128..+127
的范围,我们得到的负值比正值多一个.
C++ 从 C 继承了 char,它被定义为有一个 sizeof
为 1,是最小的可寻址大小(即具有 & 的不同地址值),最小范围为 -128..127
或 0..255
取决于它是否已签名。这归结为需要至少 8 位,或一个字节;如果机器支持,正好是一个字节。
0xff
是255的另一种写法。0x
是标记 hexadecimal 的 C 方式常量,因此其中的每个数字都是 4 位(对于 16 个可能的数字),因此半字节。这转换为所有位都设置为 1 的无符号八位位组。
如果特定大小对您的代码很重要,则标题为 stdint.h定义最小和精确尺寸的类型,用于速度或尺寸优化。
顺便说一下,ASCII 是一个 7 位字符集。具有 7 位字节的机器现在并不常见,像 ISO 8859-1 和 UTF-8 这样的更宽的字符集很流行。
关于c++ - 字节大小(说明),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6149740/