c++ - 字节大小(说明)

标签 c++ byte

我正在编写一个游戏服务器,这可能是一个简单的问题,但我只是想澄清一下。

为什么一个字节(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..1270..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/

相关文章:

c++ - 从/向一个发送者/接收者并发接收/发送

java - 存储在Cpp中可读的java字节数组

memory - 为什么可以存储的最小值是字节(8位)而不是位(1位)?

database - 刷新数据库是什么意思?还有 "flash"

c++ - 如何设置理想的 QPixmapCache::cacheLimit?

C++ 下溢和上溢

c++ - 宏作为函数参数的默认参数

c++ - 管道 "address system"

c - 使用 memcpy 连接字节 block 中的字节时出错

c - 用指针存储的数据