gpt4 book ai didi

c - 计算机如何区分空终止符的位和整数 0?

转载 作者:行者123 更新时间:2023-12-02 04:15:21 27 4
gpt4 key购买 nike

我试图理解 '\0' 的二进制表示与 C 中 int 0 的二进制表示

如果'\0'是一个字符。二进制中 1 个字节的零为:00000000 ?

如果 0 是一个整数。二进制中的 4 个字节的零为:00000000 00000000 00000000 00000000?

1.我的上述理解正确吗?

2.如果是这样,int 的第一个字节如何不与空终止符混淆?

注意: 我知道 NULL 是 C 中的指针。我在这里指的不是指针。

最佳答案

  1. is my above understanding [of the representation of various int and char values] correct?

差不多了。在 C 源代码中表示为 (char)'\0'char 值在内存中具有数值零和全零表示形式。在所有现代机器上,该表示形式的大小都是 8 位,但 C 并不强制要求该特定大小,并且某些历史机器确实使用了不同的大小。

另请注意,正如 @mch 所观察到的,在没有任何强制转换的情况下,表达式 '\0' 的类型为 int。它可以转换为 char 类型,无需显式强制转换,例如,当您将其分配给该类型的变量时,确实会发生这种情况。

  1. 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com