即使我们声明
为什么会输出整数的大小?
float a=5.6
,然后执行 printf("%d",sizeof(!a))
,输出结果为2
。为什么会输出整数的大小?
!
运算符返回一个整型,可能是 int
。在你的体系结构上,sizeof(int) == 2
。
bool
类型。 - Casey!
运算符不会返回操作数的类型。如果对 float
执行 NOT 运算,你将不会得到一个 float
,而是会得到一个逻辑上相反的值为初始 float
的 int
。0.1
被认为是 true 是因为它不是零,尽管如果它在转换为整数类型(截断)之前会变成零。 (教训:如果你不懂 C 语言等相关知识,请不要教给别人。) - user529758!E
等同于 0==E
,因此它的类型为 int
。
在您的16位体系结构上,逻辑非运算符 ! 的结果是 0,如果其操作数的值不等于 0,则为 1,其结果的类型为 int。表达式 !E 等同于 (0==E)。
sizeof(int)
是2,这解释了为什么在您的计算机上 sizeof(!a)
输出 2
。这可能会有所帮助。
void main(){
int x = !4.3;
printf("%d",x);//This will print 0
printf("%d",sizeof(0));//This will print 2
printf("%d",sizeof(!4.3));//Will print 2
}
!4.3
会返回 0。 因此,sizeof(!4.3)
= sizeof(0)
= 2
(因为0是整数),所以sizeof(!4.3)
将为2。sizeof
在编译时被评估。在 uint8_t x = 0
后面加上 sizeof(x)
将使 sizeof
评估为 1
,因此您的示例没有多大意义。sizeof
关注的是类型,而不是值。 - Thomas
!
做什么? - Lasse V. Karlsensizeof(int)
不可能是2,让人感到害怕。 - sh1