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

时间:2015-12-08 16:28:55

标签: c binary

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

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

如果0是int。二进制中4个字节的零是:00000000 00000000 00000000 00000000

1。我的上述理解是否正确?

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

注意: 我理解NULL是C中的指针。我不是指这里的指针。

3 个答案:

答案 0 :(得分:2)

<强> 1。我的上述理解是正确的吗?

<小时/> 的 2。如果是这样,int的第一个字节如何与null终止符混淆?

没有什么可以混淆的。

如果变量本身为int,则提取sizeof(int)字节,如果全部为0 s,则值为0

如果变量为char,则为sizeof(char),则会提取字节,如果全部为0,则将其解释为\0 NUL个字符。< / p>

答案 1 :(得分:1)

他们无法区分。一个是int格式的零,另一个是char格式的零。如果您使用

写入char array[]
array[0] = 0;

结果与

完全相同
array[0] = '\0';

答案 2 :(得分:1)

  
      
  1. 是我对[各种intchar值的表示]的正确理解吗?
  2.   

差不多。 C源代码中表示为char的{​​{1}}值具有数值零和内存中的全零表示。在所有现代机器上,这种表示大小为8位,但C并没有强制要求特定尺寸,而且一些历史悠久的机器确实使用了不同的尺寸。

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

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

如果您的程序能够解释char的第一个字节,就好像它是int的表示一样,那么它的行为是未定义的。否则,它知道第一个字节是char的一部分,因为它分配给该位置。 intchar的表示与相同数量的零位的适当对齐序列之间没有固有的区别,作为另一种类型对象表示的一部分。