C:声明将是什么';返回一个| 1';当A>;1.
虽然我自己不会写,但是如果C:声明将是什么';返回一个| 1';当A>;1.,c,objective-c,C,Objective C,虽然我自己不会写,但是如果A(保证为零或正整数)大于1,下面的语句的预期结果是什么 返回A | | 1; 在许多语言中,我希望返回A,除非A的值为零,在这种情况下1为零 我手头没有C语言书,但我注意到,实际上,值1似乎总是返回的。这是编译器优化的结果还是考虑到表达式的潜在模糊性,返回值是否不确定?预期结果为是(或真) |运算符如果至少有一个操作数为真(代码中的第二个操作数显然为真),则返回真值。这是直C(不涉及Objective-C)。它将始终返回1。标准说明 如果|运算符的任一操作数比较不
A
(保证为零或正整数)大于1,下面的语句的预期结果是什么
返回A | | 1;
在许多语言中,我希望返回A
,除非A
的值为零,在这种情况下1为零
我手头没有C语言书,但我注意到,实际上,值1似乎总是返回的。这是编译器优化的结果还是考虑到表达式的潜在模糊性,返回值是否不确定?预期结果为是(或真)
|
运算符如果至少有一个操作数为真(代码中的第二个操作数显然为真),则返回真值。这是直C(不涉及Objective-C)。它将始终返回1。标准说明
如果|
运算符的任一操作数比较不等于0,则该运算符应产生1;否则,结果为0。结果的类型为int
参见C中的第6.5.14节,
|
、和&
或的结果
始终为0
或1
,而不考虑操作数的值,任何其他非零值。这意味着您的A | | 1
将始终产生1。对于基于C的语言,任何非零值都是真的(由1表示)。如果你的A为零,它会检查其他的比较,如果是OR比较
在您的示例中,无论A的值是什么,都将始终返回1,即使您使用的是| | 2。如果2为非零,当使用逻辑运算符OR执行时,将始终返回true(由1表示)我相信编译器将进行优化,甚至不会检查A的值。有人能确认吗?我的印象是,对于A&&0、A | | 1和A | | 0(=A&&1),编译器通过认识到表达式可以分别简化为0、1或A来节省时间。它是否不返回“YES”,如果尝试将其作为int获取,则会将其转换为1?我对目标C一无所知,我只是在猜测。(一个快速的谷歌告诉我“是”是客观C的“真”。)不完全是
1
的宏。因此,它只返回1
。没有涉及到转换到bool
(或bool
或\u bool
或任何内容)。也许您正在考虑返回一个?A:1代码>这正是我把它改成的。啊!当然我想今天下午所有的雨都把我的脑子搞糊涂了。在我修复了bug之后,我试着把它解释给其他人,因为它对数字的价值太过关注了。这个答案与<代码> > <代码> >代码>是> < /代码>无关,但只与表达式的结果有关。在这种情况下,总是1。@罗杰:注意,如果你想要替代效果的话。描述,您可以通过返回A?A:1代码>