C# 用C语言理解简单的ANSIC数学表达式#
有人向我介绍了我认为是ANSI C语句的内容,但我不明白它在做什么,或者它是否有效 x=(y==4)*12+(y==5)*24 有谁能帮我理解这句话用C#(我真的理解)来表达的意思吗C# 用C语言理解简单的ANSIC数学表达式#,c#,math,C#,Math,有人向我介绍了我认为是ANSI C语句的内容,但我不明白它在做什么,或者它是否有效 x=(y==4)*12+(y==5)*24 有谁能帮我理解这句话用C#(我真的理解)来表达的意思吗 谢谢这在C#中绝对是错误的。这两个表达式,y==4和y==5都作为布尔值计算。也就是说,如何定义布尔值和整数之间的乘法?此表达式在C#中不正确 我想说,你可以尝试以下方法: x = (y == 4 ? 1 : 0) * 12 + (y == 5 ? 1 : 0) * 24; 在上面的表达式中,我们使用了三元运算符
谢谢这在C#中绝对是错误的。这两个表达式,
y==4
和y==5
都作为布尔值计算。也就是说,如何定义布尔值和整数之间的乘法?此表达式在C#中不正确
我想说,你可以尝试以下方法:
x = (y == 4 ? 1 : 0) * 12 + (y == 5 ? 1 : 0) * 24;
在上面的表达式中,我们使用了三元运算符,它的逻辑非常简单,如果表达式的计算结果为true,然后在问号后返回结果。否则,它将返回:
后面的值。因此,如果y
等于4,那么(y==4?1:0)
的计算结果为1。否则,它返回0
上述解决方案基于hvd在其评论中提到的,即
=
在C中返回0或1。这在C中肯定是错误的。这两个表达式,y==4
和y==5
都作为布尔值计算。也就是说,如何定义布尔值和整数之间的乘法?此表达式在C#中不正确
我想说,你可以尝试以下方法:
x = (y == 4 ? 1 : 0) * 12 + (y == 5 ? 1 : 0) * 24;
在上面的表达式中,我们使用了三元运算符,它的逻辑非常简单,如果表达式的计算结果为true,然后在问号后返回结果。否则,它将返回:
后面的值。因此,如果y
等于4,那么(y==4?1:0)
的计算结果为1。否则,它返回0
上述解决方案基于hvd在其评论中提到的
==
在C中返回0或1。历史上,C没有布尔类型。*比较运算符返回0或1,类型int
。任何int
值(以及其他类型)都可以在布尔上下文中解释,其中0
表示false,任何其他值表示true
C#将int
和bool
视为完全独立的类型。最直接的C#等价物是
x = (y == 4 ? 1 : 0) * 12 + (y == 5 ? 1 : 0) * 24;
这当然可以进一步大大改进
*通常,“ANSIC”指的是C的原始版本,尽管ANSI也采用了C的更高版本。这些更高版本确实添加了布尔类型,但比较运算符仍然返回int
值。同样,布尔上下文中的整数也是允许的。它们不会改变与您的问题相关的任何内容。历史上,C没有布尔类型。*比较运算符返回0
或1
,类型int
。任何int
值(以及其他类型)都可以在布尔上下文中解释,其中0
表示false,任何其他值表示true
C#将int
和bool
视为完全独立的类型。最直接的C#等价物是
x = (y == 4 ? 1 : 0) * 12 + (y == 5 ? 1 : 0) * 24;
这当然可以进一步大大改进
*通常,“ANSIC”指的是C的原始版本,尽管ANSI也采用了C的更高版本。这些更高版本确实添加了布尔类型,但比较运算符仍然返回int
值。同样,布尔上下文中的整数也是允许的。它们不会改变与您的问题相关的任何内容。这显然不符合逻辑!:嗯,我们不知道你是什么类型的。。。这段代码可以在C#中编译,使用一些“不寻常的”重载运算符。(我刚刚证明了…)在C中,=
返回0
或1
,它们既可以用作真值,也可以用作数字。这个答案是完全错误的。我不认为这是正确的,但我被这是我的编码课家庭作业的一部分这一事实所震惊。我怀疑有人试图用伪代码来表达某些东西,这毫无意义。嘿,我当时正在键入我自己的类似答案。是的,在我看来是对的。这很简单,不太符合逻辑!:嗯,我们不知道你是什么类型的。。。这段代码可以在C#中编译,使用一些“不寻常的”重载运算符。(我刚刚证明了…)在C中,=
返回0
或1
,它们既可以用作真值,也可以用作数字。这个答案是完全错误的。我不认为这是正确的,但我被这是我的编码课家庭作业的一部分这一事实所震惊。我怀疑有人试图用伪代码来表达某些东西,这毫无意义。嘿,我当时正在键入我自己的类似答案。是的,我看对了。x=(y==4?1:0)*12+(y==5?1:0)*24代码>x=(y==4?1:0)*12+(y==5?1:0)*24我不知道这个!这就是为什么这么多整数被视为布尔数的原因…谢谢。我会用这个来回答家庭作业的问题,尽管我怀疑这个问题不是错误就是解释得不好。比较和布尔运算符仍然会产生int
结果\u Bool
仅适用于变量,例如\u Bool b=5代码>或int*p=NULL_布尔b=p代码>@Olaf我知道。我只提到了C的原始版本是什么样的,因为后来的添加并没有改变与这个问题相关的任何内容。这和你在评论中写的差不多我不会在真正意义上是C89的OP上赌一分钱。仍然有许多人只是使用术语“ANSI-C”来对比(前标准)K&R-C,但实际上是指标准C(即C11,C99不是标准C)。关键是,正如您现在添加的,C99/C11的行为没有改变。这使得过去式过时了。我只是想澄清一下,你不知怎么做了,我不知道!这就是为什么要处理这么多整数