2
  1. 既然sizeof是操作符,为什么我们可以sizeof(something);像函数调用一样使用呢?

  2. 什么时候一个字节不是 8 位?

此上下文中的字节与无符号字符相同,并且可能大于 8 位

字节是否有可能小于 8 位?

4

5 回答 5

5

像大多数运算符一样,sizeof可以应用于可以包含括号的表达式。就解析器而言,它与类似的东西几乎相同x * (b + c),其中*适用于(b + c). 虽然你不经常看到它,但类似的东西x + (b)也是完全可能的。

该标准规定CHAR_MIN不得高于 -127 并且CHAR_MAX必须至少为 127。这需要至少 8 位来表示,所以不,char 不能小于 8 位。

于 2013-09-02T15:47:32.823 回答
5

既然 sizeof 是一个操作符,为什么我们可以使用 sizof(something); 像函数调用?

好吧,+也是一个“操作员”(原文如此!),您仍然可以编写(1 + 1)并且(1) + (1)...((1) + 1)这只是正常的括号/分组。

当字节不是8位时?

当您使用不是 8 位的平台时。

字节是否有可能小于 8 位?

不在旨在成为符合 C 实现的架构上。不过,它可能会发生。例如,一些早期的打卡机使用 6 位字节。

于 2013-09-02T15:49:27.340 回答
2
  1. 既然 sizeof 是一个操作符,为什么我们可以使用 sizof(something); 像函数调用?

    其他人回答了这个,但无论如何我都会回答。~是一个运算符,那么为什么我们可以使用~(a)而不是~a?虽然根本不同,但它们在语法方面仍然相似。例外是你可以做sizeof(int),但那是因为做了什么sizeof,它被扩展为一个编译时常量。

  2. 当字节不是8位时?

     

    此上下文中的字节与无符号字符相同,并且可能大于 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则 a 为 32 位整数类型。

于 2013-09-02T16:49:26.807 回答
0

计算机科学对字节的定义有所不同。这是8位。而 C 的定义是 byte 是 char 类型的位数。由于它几乎总是相同的,因此它们被视为平等是很常见的。

于 2013-09-02T16:36:30.270 回答
-1
  1. 是的。
  2. 怀疑您有一台字节不是 8 位的机器。无论如何, sizeof() 需要一个类型。“字节”不是一种类型。类型类似于“char”“short”“int”。在 C 中,最小的类型是一个字节的 char。也许我应该说“可能是一个字节”。
于 2013-09-02T15:46:20.420 回答