这种转换有多便携.我可以确定两个断言都通过了吗?
int x = 4<5;
assert(x==1);
x = 4>5;
assert(x==0);
Run Code Online (Sandbox Code Playgroud)
不要问为什么.我知道这很难看.谢谢.
一个问题被张贴有关链比较运营商以及它们如何在不同的语言解释.
链接比较运算符意味着(x < y < z)将被解释为((x < y) && (y < z))而不是((x < y) < z).
对该问题的评论表明,Python,Perl 6和Mathematica支持链接比较运算符,但是其他语言支持这个功能,为什么它不常见?
快速浏览一下Python文档就可以看出这个功能至少从1996年开始.有没有更多语言没有添加这种语法的原因?
静态类型语言会出现类型转换问题,但还有其他原因这种情况不常见吗?
这是一个有效的表达吗?如果是这样,你能改写它以使它更有意义吗?例如,它是一样的(4 > y && y > 1)吗?您如何评估链式逻辑运算符?
c++ conditional boolean-logic if-statement logical-operators
我试图建立三个相等变量的相等,但下面的代码不打印应该打印的明显正确的答案.有人可以解释,编译器如何解析if(condition)内部给定的?
#include<stdio.h>
int main()
{
int i = 123, j = 123, k = 123;
if ( i == j == k)
printf("Equal\n");
else
printf("NOT Equal\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
manav@workstation:~$ gcc -Wall -pedantic calc.c
calc.c: In function ‘main’:
calc.c:5: warning: suggest parentheses around comparison in operand of ‘==’
manav@workstation:~$ ./a.out
NOT Equal
manav@workstation:~$
Run Code Online (Sandbox Code Playgroud)
编辑:
通过下面给出的答案,以下声明可以检查上面的相等吗?
if ( (i==j) == (j==k))
Run Code Online (Sandbox Code Playgroud) 我在ideone和Visual Studio 2013上尝试了这个代码:
int main()
{
int x = 5;
if(4 < x < 6)
{
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在ideone上产生运行时错误,但在VS上完全正常.
该标准对这种不一致的行为有何评价.我知道有编译警告,但我想知道为什么这不是原生/官方支持?
我有一个非常愚蠢但奇怪的问题.当我试图编译并运行以下代码时,我的编译器正在打印"ggl",但我认为它不应该.奇怪的是,经过这么多的编程,我被困在这里.究竟是什么问题?有人可以帮帮我吗?提前致谢 !!
#include <iostream>
using namespace std;
int main() {
int t=8;
if(1<t<5){
cout<<"ggl";
}
//cout<<aa;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在学习C,却遇到了一个奇怪的问题。我想我了解多个if和else-if语句之间的区别,但是这次我根本无法理解行为上的区别。如果我删除else关键字,则它按预期工作,但不包含else。
该代码是关于在不区分大小写的情况下对每个字母的出现进行计数的(因此,“ a”和“ A”都被视为字母“ a”的出现次数)。
我尽力去掉括号,但什么也没改变,所以我把它们留在里面以避免警告。
while ((c = getchar()) != EOF)
{
if ('A' < c < 'Z')
{
++array[c - 'A'];
}
else if ('a' < c < 'z')
{
++array[c - 'a'];
}
}
Run Code Online (Sandbox Code Playgroud)
当我键入“ a”时,数组不会递增,但是如果删除else语句,从而切换到if倍数的情况,它将按预期工作。在两种情况下,字母“ A”都会很好地更新数组。
您能否帮助我了解这种情况下的行为差异?