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

JCD*_*per 3 c primitive byte bit

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

tad*_*man 6

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

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

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

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

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