我有下面的代码,我不明白表达式a = b!= c的含义是什么?
shiftLeft = local.tasks.first != NULL;
if(!shiftLeft)
local.tasks.last = NULL;
我的意思是shiftLeft变量(即布尔值)应该是最后的评估,因此首先评估local.tasks.first!= NULL ,但那是什么?
我有下面的代码,我不明白表达式a = b!= c的含义是什么?
shiftLeft = local.tasks.first != NULL;
if(!shiftLeft)
local.tasks.last = NULL;
我的意思是shiftLeft变量(即布尔值)应该是最后的评估,因此首先评估local.tasks.first!= NULL ,但那是什么?
这将返回true或false值(取决于事实,如果local.task.first
是NULL
值或不)。
如果local.task.first
是NULL
一个shiftLeft
变量将得到false
值,
如果local.task.first
不是NULL
值shiftLeft
变量将得到true
值。
什么是重要的,我们不知道shiftLeft
的类型,如果它是一个布尔变量,它将被“填充”true
或false
值。如果它是其他类型的变量(例如一个整数),它将被填充为0,对于false
和有一些不同于0的真实(但我们无法确定究竟是什么)。
是布尔值,我在第一篇文章中说过。 – user1797147
但我不明白的是这种三元形式的简短形式,如shitLeft = local.tasks.first!= NULL? 0:1; – user1797147
@ user1797147,将表达式看作是'a =(b!= c);',它在概念上与'y = x + z'没有区别。三元运算符'?'没有涉及,但你通常是正确的;它在逻辑上等同于'a = b!= c? 1:0“,依此类推。 – ray
b!= c部分返回布尔型响应(true或false)。然后将结果分配给a。
在你的例子中,如果local.tasks.first不为null,那么shitLeft(sic)为true。否则它是错误的。
谢谢,感谢。 – user1797147
这里!=
表达首先计算因为!=
具有比=
更高的优先级,因此它首先用NULL
比较,然后分配到shitLeft
。
如果shitLeft
为真,那么if
条件false
,否则if
条件true
。
'='是赋值运算符。这几乎是你应该先了解C的第一件事。另外,我认为你在一个变量中忘记了一个'f',除非你正在做一个非常粗糙的游戏。 – Cubic
'!='运算符结果有'int'类型,可能是'0'或'1',所以'shiftleft'变成'0'或'1'。 – Sergio
@ M.SChaudhari不,这个问题与这个问题完全没有关系。 – Cubic