我试图理解 '\0'
的二进制表示与 C 中 int 0
的二进制表示
如果'\0'
是一个字符。二进制中 1 个字节的零为:00000000
?
如果 0 是一个整数。二进制中的 4 个字节的零为:00000000 00000000 00000000 00000000
?
1.我的上述理解正确吗?
2.如果是这样,int 的第一个字节如何不与空终止符混淆?
注意: 我知道 NULL
是 C 中的指针。我在这里指的不是指针。
最佳答案
- is my above understanding [of the representation of various
int
andchar
values] correct?
差不多了。在 C 源代码中表示为 (char)'\0'
的 char
值在内存中具有数值零和全零表示形式。在所有现代机器上,该表示形式的大小都是 8 位,但 C 并不强制要求该特定大小,并且某些历史机器确实使用了不同的大小。
另请注意,正如 @mch 所观察到的,在没有任何强制转换的情况下,表达式 '\0'
的类型为 int
。它可以转换为 char
类型,无需显式强制转换,例如,当您将其分配给该类型的变量时,确实会发生这种情况。
- if so, how is the first byte of an int not confused with a null terminator?
如果您的程序能够将 int
的第一个字节解释为 char
的表示,那么它的行为是未定义的。否则,它知道第一个字节是 int
的一部分,因为这是它分配给该位置的字节。 char
值 (char)'\0'
的表示与作为另一种类型的对象的表示。
关于c - 计算机如何区分空终止符的位和整数 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34161036/