For an operation of the form ?x, unary operator overload resolution (?4.2.3)
is applied to select a specific
operator implementation. The operand is converted to the parameter type of
the selected operator, and the
type of the result is the return type of the operator. The predefined
negation operators are:
?Integer negation:
int operator ?(int x);
long operator ?(long x);
The result is computed by subtracting x from zero. In a checked context, if
the value of x is the
maximum negative int or long, a System.OverflowException is thrown. In an
unchecked
context, if the value of x is the maximum negative int or long, the result
is that same value and the
overflow is not reported.
If the operand of the negation operator is of type uint, it is converted to
type long, and the type of the
result is long. An exception is the rule that permits the int value
-2147483648 (-231) to be written as a
decimal integer literal (?.4.4.2).
If the operand of the negation operator is of type ulong, a compile-time
error occurs. An exception is
the rule that permits the long value -9223372036854775808 (-263) to be
written as a decimal integer
literal (?.4.4.2).
?Floating-point negation:
float operator ?(float x);
double operator ?(double x);
The result is the value of x with its sign inverted. If x is NaN, the
result is also NaN.
?Decimal negation:
decimal operator ?(decimal x);
The result is computed by subtracting x from zero.
Decimal negation is equivalent to using the unary minus operator of type
System.Decimal.
is applied to select a specific
operator implementation. The operand is converted to the parameter type of
the selected operator, and the
type of the result is the return type of the operator. The predefined
negation operators are:
?Integer negation:
int operator ?(int x);
long operator ?(long x);
The result is computed by subtracting x from zero. In a checked context, if
the value of x is the
maximum negative int or long, a System.OverflowException is thrown. In an
unchecked
context, if the value of x is the maximum negative int or long, the result
is that same value and the
overflow is not reported.
If the operand of the negation operator is of type uint, it is converted to
type long, and the type of the
result is long. An exception is the rule that permits the int value
-2147483648 (-231) to be written as a
decimal integer literal (?.4.4.2).
If the operand of the negation operator is of type ulong, a compile-time
error occurs. An exception is
the rule that permits the long value -9223372036854775808 (-263) to be
written as a decimal integer
literal (?.4.4.2).
?Floating-point negation:
float operator ?(float x);
double operator ?(double x);
The result is the value of x with its sign inverted. If x is NaN, the
result is also NaN.
?Decimal negation:
decimal operator ?(decimal x);
The result is computed by subtracting x from zero.
Decimal negation is equivalent to using the unary minus operator of type
System.Decimal.
本文详细介绍了C#中运算符重载的概念及其应用,包括整数取负、浮点数取负及十进制取负等运算符的具体实现方式。文章特别强调了在不同上下文中溢出处理的方法,并解释了当操作数为特定类型时如何进行类型转换。
76

被折叠的 条评论
为什么被折叠?



