我试图理解'\0'
的二进制表示与C中int 0
的二进制表示
如果'\0'
是个字符。二进制中1个字节的零是:00000000
?
如果0是int。二进制中4个字节的零是:00000000 00000000 00000000 00000000
?
1。我的上述理解是否正确?
2. 如果是这样,int的第一个字节如何与null终止符混淆?
注意: 我理解NULL
是C中的指针。我不是指这里的指针。
答案 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)
- 是我对[各种
醇>int
和char
值的表示]的正确理解吗?
差不多。 C源代码中表示为char
的{{1}}值具有数值零和内存中的全零表示。在所有现代机器上,这种表示大小为8位,但C并没有强制要求特定尺寸,而且一些历史悠久的机器确实使用了不同的尺寸。
另请注意,@ mch观察到,没有任何强制转换,表达式(char)'\0'
的类型为'\0'
。它可以在没有显式强制转换的情况下转换为int
类型,例如,当您将其分配给该类型的变量时确实会发生。
- 如果是这样,int的第一个字节如何与null终止符混淆?
醇>
如果您的程序能够解释char
的第一个字节,就好像它是int
的表示一样,那么它的行为是未定义的。否则,它知道第一个字节是char
的一部分,因为它分配给该位置。 int
值char
的表示与相同数量的零位的适当对齐序列之间没有固有的区别,作为另一种类型对象表示的一部分。