C/C++中的“byte”是什么?

19
例如,这里是fread的参考文献:
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
读取一个大小为“size bytes”的元素数组,每个数组中包含count个元素... 那么fread(&x, 1, 1, stream)会读取多少位?是8位还是CHAR_BIT位?

3
那是来自Linux man手册对吗?C标准的定义并没有提到字节:"fread函数从指向流的指针stream所指向的流中读取大小由size指定,最多读取nmemb个元素到指向数组的指针ptr中。" - Fred Foo
6
由于这段内容来自Linux man页面,Posix保证了CHAR_BIT等于8。 - Steve Jessop
1
@JeremyP:C标准是这样定义的,但“C标准中fread的定义”并不包含。 - Steve Jessop
1
当然,一个程序员应该采用防御性编程。虽然现代系统的CHAR_BIT值不太可能会有所不同,但了解这里的语义是很好的。 - Jonathan Grynspan
8
附加 $0.02:当您需要一个明确的术语来指代8位有意义的数据块时,请称其为“八位组”。 - Brian McFarland
显示剩余5条评论
2个回答

27

C99,§3.6:

字节

可寻址的数据存储单元大小足以容纳执行环境中基本字符集中的任何成员。

和§5.2.4.2.1:

CHAR_BIT — 最小非位域对象(即字节)的比特数

因此,“字节”包含CHAR_BIT个比特。


17

CHAR_BIT。字节位宽度是由实现定义的,并且可通过CHAR_BIT宏变量获取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接