C# 用C语言理解简单的ANSIC数学表达式#

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; 在上面的表达式中,我们使用了三元运算符

有人向我介绍了我认为是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;
在上面的表达式中,我们使用了三元运算符,它的逻辑非常简单,如果表达式的计算结果为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)*24int
结果
\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的行为没有改变。这使得过去式过时了。我只是想澄清一下,你不知怎么做了,我不知道!这就是为什么要处理这么多整数