字节大小(澄清)

Guu*_*ink 1 c++ byte

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

为什么一个字节(char或unsigned char)最多可以容纳255(0xFF,我认为是2个字节)?当我使用sizeof(unsigned char)编译器告诉我它是1个字节.是因为(在ACSII中)它被"转换"为一个角色?

对不起这个糟糕的解释,我不是很擅长描述一个问题.

Yan*_*ier 31

这触及了许多主题,包括字节的历史意义,字符的C定义和数学.

对于初学者来说,一个字节在历史上已经有很多东西,但是现在我们几乎总是指八位字节,即8位.作为单词的游戏,还有nybble(或经常是半字节),这是半个字节(不称为咬).

数学告诉我们,通过8个1-or-0值的有序组合,我们得到组合.有时我们使用这个无符号的,有时是签名的,但无论哪种方式,我们希望在范围内有0; 所以无符号范围是.对于签名范围,我们有更多选项,其中两个补充是最受欢迎的; 在这种情况下,我们得到的一个负值比正值多一个.28 = 2560..255-128..+127

C++从C继承char,其中a被定义为sizeof1,是最小的可寻址大小(即具有与&的不同地址值),以及最小范围-128..1270..255取决于它是否已签名.归结为需要至少 8位或一个字节; 如果机器支持它,则只需一个字节.

0xff写入255的另一种0x方式是标记十六进制常量的C方式,因此其中的每个数字是4位(对于16个可能的数字),然后是半字节.这转换为无符号八位字节,所有位都设置为1.

如果特定大小对您的代码很重要,那么有一个标题stdint.h定义了最小和精确大小的类型,用于速度或大小优化.

顺便提一下,ASCII是一个7位字符集.现在,具有7位字节的机器是不寻常的,并且像ISO 8859-1和UTF-8这样的更宽的字符集很受欢迎.


Bjö*_*lex 8

0xFF 可以存储为8位,即一个字节.

sizeof(char)定义为始终返回1,而不管基础数据类型的实际位大小(参见当前标准的5.3.3.1).所有其他数据表的大小是相对于a的大小计算的char.


Pra*_*rav 5

当我使用 sizeof(unsigned char) 时,编译器告诉我它是 1 个字节。

char根据 C++ 标准的规定,[无论是有符号还是无符号]的大小始终为 1。