基本类型的C#重载运算符

时间:2019-07-07 05:57:00

标签: c# operator-overloading operators

是否可以为||&&之类的类型重载!intfloat之类的运算符?

示例:

float a, b; int c;
//instead of this:
return Convert.ToBoolean(a) || Convert.ToBoolean(b) && !Convert.ToBoolean(c);
//do this:
return a || b && !c;

3 个答案:

答案 0 :(得分:2)

对于OR,您使用|符号。例如:

return a | b; 

如果trueab,将返回true。否则,它将返回false

此外,您还可以使用&运算符:

return a & b;

如果truea都在b中,则返回true。否则,它将返回false。我建议您在这里查看文档以了解更多操作员:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators

当然,正如网站标题所说的(布尔运算符)一样,不可能对整数和浮点数执行此操作,因为它们没有任何意义。我的意思是为什么您要返回2 or 4 & 5?它只是没有任何价值。如果发现任何内容,请看这里:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/overloadable-operators

编辑:实际上,它取决于您在做什么,正如您所指出的那样,它对于某些问题/算法(例如处理矩阵等)很有用。但是由于您不一定要指定做什么我在日常编程中都了解您所做的那种事情。无论如何,上面是整数的运算符。不过,我认为您不能使用浮点数重载运算符。

此外,@ SohaibJundi说(出色的工作),您可以使用{而不是!

return ~a;

这将返回与a的值相反的值。这意味着如果atrue,它将返回false,如果它是false,它将返回true

希望有帮助!

答案 1 :(得分:2)

使用整数时,可以使用按位运算符来实现。

您将使用&代替&&,|。代替||和〜而不是!。

它看起来像这样:

    int a, b, c;
    //instead of this:
    //return Convert.ToBoolean(a) || Convert.ToBoolean(b) && !Convert.ToBoolean(c);
    //do this:
    return (a | b & ~c) != 0;

但是如果是浮点数,则不能使用这些运算符。

编辑: 经过深思熟虑,我相信您不能这样做。所有非零值的评估结果都为true,但零的评估结果为false。记住这一点,使用按位和(&)将两个非零值相加可能会得出零。例如:a = 1,b = 2-> a&b =0。此外,按位取反(〜)仅适用于-1时,其取值为零。转换为布尔值时,〜1的计算结果将为非零。

答案 2 :(得分:1)

  1. 来自https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/introduction#expressions

      

    运算符重载允许用户定义的运算符实现   为操作指定一个或两个操作数为   用户定义的类或结构类型。   Overloading Primitive Operator (C#)

  2. 来自https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/boolean-logical-operators#operator-overloadability

      

    用户定义的类型不能重载条件逻辑运算符   &&和||。但是,如果用户定义的类型重载true和   假运算符和&或|运算符,即&&或||   可以分别评估该操作的操作数   类型。

有关更多信息,https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#user-defined-conditional-logical-operators