4

即使我们声明float a=5.6thenprintf("%d",sizeof(!a))输出2。为什么它输出整数的大小?

4

4 回答 4

10

!运算符返回一个整数类型,可能是intsizeof(int) == 2显然,在你的架构上。

于 2013-06-30T10:03:41.267 回答
3

!运算符不返回操作数的类型。如果你在 a 上执行 NOT float,你将不会得到float回报。您将得到一个int与 initial 逻辑相反的值float

于 2013-06-30T10:05:39.070 回答
2

根据https://stackoverflow.com/a/9833830/1787973!E它等同于0==E,因此,它是 type int

逻辑否定运算符的结果!如果其操作数的值比较不等于 0,则为 0,如果其操作数的值比较等于 0,则为 1。结果的类型为 int。表达式 !E 等价于 (0==E)。

sizeof(int)在您的 16 位架构上是 2,解释了为什么在您的计算机上sizeof(!a)输出。2

于 2013-06-30T10:29:16.517 回答
-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 。

于 2013-06-30T10:05:35.210 回答