即使我们声明float a=5.6
,然后printf("%d",sizeof(!a))
输出2
。
为什么输出整数大小?
答案 0 :(得分:10)
!
运算符返回一个整数类型,可能是int
。 sizeof(int) == 2
显然是您的架构。
答案 1 :(得分:3)
!
运算符不返回操作数的类型。如果您在float
上执行NOT,则不会返回float
。您将获得int
,其初始float
的值与逻辑相反。
答案 2 :(得分:2)
根据https://stackoverflow.com/a/9833830/1787973,!E
相当于0==E
,因此属于int
类型。
16位架构上的逻辑否定运算符的结果!如果其操作数的值不等于0则为0,如果其操作数的值为1则为1 比较等于0.结果类型为int。表达式!E是 相当于(0 == E)。
sizeof(int)
为2,解释了为什么sizeof(!a)
会在您的计算机上输出2
。
答案 3 :(得分:-1)
这可能有所帮助。
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。