由于sizeof
是运算符,为什么我们可以像调用函数一样使用sizeof(something);
?
何时字节不是8位?
此上下文中的字节与unsigned char相同,可能大于8位
是否有可能该字节小于8位?
答案 0 :(得分:5)
与大多数运算符一样,sizeof
可以应用于表达式,其中可以包括括号。就解析器而言,它与x * (b + c)
几乎相同,其中*
适用于(b + c)
。虽然你没有经常看到它,但像x + (b)
这样的东西也是完全可能的。
该标准规定CHAR_MIN
必须不高于-127且CHAR_MAX
必须至少为127.这需要至少8位来表示,所以不,char不能是任何小于8位。
答案 1 :(得分:5)
由于sizeof是一个操作符,为什么我们可以使用sizof(某些东西);喜欢函数调用?
嗯,+
是一个"操作员" (原文如此!),你仍然可以写(1 + 1)
和(1) + (1)
以及((1) + 1)
......这只是正常的括号/分组。
当字节不是8位时?
当您使用的平台不是8位时。
是否有可能该字节小于8位?
不在旨在成为符合C的实现的体系结构上。但它可能会发生。例如,一些早期的穿卡机使用6位字节。
答案 2 :(得分:2)
由于sizeof是一个操作符,为什么我们可以使用sizof(某些东西);喜欢函数调用?
其他人回答了这个问题,但无论如何我都会回答。 ~
是运营商,为什么我们可以使用~(a)
代替~a
?虽然根本不同,但它们在语法方面仍然相似。例外情况是您可以执行sizeof(int)
,但这是因为sizeof
所做的事情,它会扩展为编译时常量。
当字节不是8位时?
此上下文中的一个字节与unsigned char相同,可能大于8位
某些平台有9位字节。 C标准要求每个字符至少8位。目前,许多系统使用8位字节,也就是“八位字节”。
在像Java这样的语言中,char
不是8位,因此C的实现可以很容易地以相同的方式定义它。如果没有位掩码和位移或位字段,您将无法使用标准C语法访问少量数据,因为其他数据类型(如short int
)是根据char
定义的:
存储在任何其他对象类型的非位字段对象中的值由 n × CHAR_BIT 位组成,其中 n 是大小该类型的对象,以字节为单位。
因此,如果sizeof(short int)
为2,则它将具有2 × CHAR_BIT
位。如果CHAR_BIT
为16,则short int
是32位整数类型。
答案 3 :(得分:0)
字节的计算机科学定义存在差异。这是8位。而C definiton是byte是char类型的位数。由于它几乎总是相同的,因此它们被视为平等。
答案 4 :(得分:-1)