2016-09-21 115 views
1

我有下面的代码,我不明白表达式a = b!= c的含义是什么?

shiftLeft = local.tasks.first != NULL; 
if(!shiftLeft) 
    local.tasks.last = NULL; 

我的意思是shiftLeft变量(即布尔值)应该是最后的评估,因此首先评估local.tasks.first!= NULL ,但那是什么?

+8

'='是赋值运算符。这几乎是你应该先了解C的第一件事。另外,我认为你在一个变量中忘记了一个'f',除非你正在做一个非常粗糙的游戏。 – Cubic

+0

'!='运算符结果有'int'类型,可能是'0'或'1',所以'shiftleft'变成'0'或'1'。 – Sergio

+2

@ M.SChaudhari不,这个问题与这个问题完全没有关系。 – Cubic

回答

4

这将返回true或false值(取决于事实,如果local.task.firstNULL值或不)。

如果local.task.firstNULL一个shiftLeft变量将得到false值,

如果local.task.first不是NULLshiftLeft变量将得到true值。

什么是重要的,我们不知道shiftLeft的类型,如果它是一个布尔变量,它将被“填充”truefalse值。如果它是其他类型的变量(例如一个整数),它将被填充为0,对于false有一些不同于0的真实(但我们无法确定究竟是什么)。

+0

是布尔值,我在第一篇文章中说过。 – user1797147

+0

但我不明白的是这种三元形式的简短形式,如shitLeft = local.tasks.first!= NULL? 0:1; – user1797147

+0

@ user1797147,将表达式看作是'a =(b!= c);',它在概念上与'y = x + z'没有区别。三元运算符'?'没有涉及,但你通常是正确的;它在逻辑上等同于'a = b!= c? 1:0“,依此类推。 – ray

1

b!= c部分返回布尔型响应(true或false)。然后将结果分配给a

在你的例子中,如果local.tasks.first不为null,那么shitLeft(sic)为true。否则它是错误的。

+0

谢谢,感谢。 – user1797147

3

这里!=表达首先计算因为!=具有比=更高的优先级,因此它首先用NULL比较,然后分配到shitLeft

如果shitLeft为真,那么if条件false,否则if条件true

相关问题