C中的位,字节,字符和整数大小

时间:2017-10-03 02:03:49

标签: c byte bit primitive

根据我在Google协议流程中搜索和发现的内容,我发现一个字符总是1个字节。这是肯定的。但是,我也看到它可能不是8位(可能更大,见CHAR_BITS)。这是否意味着,如果它是,比如10位,在一些假设的架构中,那么1个字节= 10位?这是否意味着如果实现将整数默认为4个字节,那么int的大小将是40位?尽管互联网上的线程数量非常疯狂,但我对所有这些位字节的变化都有点不稳定。

1 个答案:

答案 0 :(得分:6)

对于现代平台,这些大小是可预测的,字节是8位,int是4或8个字节,依此类推。 “字节”的定义和实现不太可能改变,因为它的这个版本在20世纪70年代引入了8位CPU,这可以说导致ASCII胜过竞争标准。它已经变得如此根深蒂固,以至于某些语言在字面上对待它:在法语中,“byte”这个词是“八位字节”。

对于历史平台,所有投注都已关闭。有些使用10,12,18或36位整数。早期的计算机根本不使用字节,而是使用任意大小的words。事物由这些单元组成,其中“双字”值可能是48位,无论出于何种原因。这是一个单个位可能由几个真空管或全尺寸晶体管代表的时代,因此实际成本问题会导致一些非常异常的设计。

现在谈到角色时,它们不一定是一个字节。在UNICODE中,它们可以比它更多,特别是当表达为UTF-8,UTF-16或UTF-32时,这种文本的常用编码方法。只有像Latin1这样的8位编码才能使字符和字节可以互换。

重要的是要考虑到,虽然大多数消费者CPU的尺寸非常均匀,但在处理DSP或自定义FPGA处理器等专用设备时,这一切都会消失。

好消息是,您不太可能在DSP或定制FPGA处理器上进行字符处理,这些处理器是围绕不寻常的寄存器大小构建的。这些通常专注于处理其他类型的数字数据。