简单地放入C和变体(与虚拟机不同,wuss java不同),不同目标上的原始类型的大小可能差别很大,除非您使用stdint.h
中定义的固定宽度类型,你的实现必须支持他们。是否sizeof返回C中的字节数或类型的八位字节数?
无论如何假设(因为在大多数现代机器上,一个字节是一个八位字节,为了网络的目的,我假设(ASCII))sizeof返回字节或八位字节的数据类型的大小?
简单地放入C和变体(与虚拟机不同,wuss java不同),不同目标上的原始类型的大小可能差别很大,除非您使用stdint.h
中定义的固定宽度类型,你的实现必须支持他们。是否sizeof返回C中的字节数或类型的八位字节数?
无论如何假设(因为在大多数现代机器上,一个字节是一个八位字节,为了网络的目的,我假设(ASCII))sizeof返回字节或八位字节的数据类型的大小?
答案:sizeof
返回类型的大小在字节。
示例:sizeof(char)
是100%保证是1
,但是这并不意味着,它的一个八位字节(8个比特)。
由标准实践证明:
在6.5.3.4,点2:其操作数的
sizeof运算符产生的尺寸(以字节为单位),其可以是 表达式或类型的括号内的名称。大小由操作数的类型 决定。结果是一个整数。如果操作数的类型是可变长度数组 类型,则评估操作数;否则,操作数不会被评估,结果是一个整数常量 。
...
当应用于具有类型char,无符号的字符,或符号的字符, (或一个合格音响ED版本物)的结果是1一个操作数。当应用于数组类型为 的操作数时,结果为数组中的字节总数)应用于具有结构或联合类型的操作数 时,结果为此类对象中的总字节数 包括内部和尾部填充。
另外,在第3.6节,第3点:
一个字节的比特位构成的连续序列的,其数目是实现定义
非常全面,谢谢你。 – awiebe 2012-08-08 16:37:39
sizeof
总是返回大小作为字节数。但根据wikipedia:
在编程语言C和C++,一元运算符的sizeof用于计算任何数据类型的大小,在以代表类型所需要的字节数来测量。在这个上下文中的字节与无符号字符相同,并且可能大于8位,尽管这是罕见的。
sizeof
给出了大小以字节表示。但是请注意,“字节”是C标准中的一个技术术语,其定义如下:sizeof(char) == 1
。
从我自己的经验,在嵌入式微控制器,具有异国情调的 'C' 编译器的工作,我已经看到了:
sizeof(uint8)
回报1
sizeof(uint16)
回报1
sizeof(uint32)
返回2
显然,我正在处理一台机器是最小的可寻址实体是16位,所以sizeof不符合C89或C99。
我会说主流C89 &符合C99的系统,接受的答案是正确的。 不幸的是,“C”编译器仍然可以称为“C”编译器,即使它不符合25年前的标准。我希望这个答案有助于在给定更多异域系统的情况下进行透视。
字节,但是一个字节(表示为char)具有CHAR_BITS位。如果你需要'T'中的八位位组数,请执行'sizeof(T)* CHAR_BITS/8'。在大多数平台上,'CHAR_BITS'是'8'。 – GManNickG 2012-08-08 15:46:17
@GManNickG'CHAR_BIT'(没有S):) – Praetorian 2012-08-08 15:55:45
float octetPercent = sizeof(T)* CHAR_BIT /8.0; – awiebe 2012-08-08 16:05:55