收藏 分享(赏)

c# 一元表达式.docx

上传人:scg750829 文档编号:7667008 上传时间:2019-05-23 格式:DOCX 页数:8 大小:20.27KB
下载 相关 举报
c#  一元表达式.docx_第1页
第1页 / 共8页
c#  一元表达式.docx_第2页
第2页 / 共8页
c#  一元表达式.docx_第3页
第3页 / 共8页
c#  一元表达式.docx_第4页
第4页 / 共8页
c#  一元表达式.docx_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、1. 一元表达式11 一元正值运算符12 一元负值运算符13 逻辑非运算符14 按位求补运算符15 间接运算符16 地址运算符17 前缀增量和减量运算符18 强制类型转换表达式1. 一元表达式unary-expression: primary-expression + unary-expression - unary-expression ! unary-expression unary-expression * unary-expression uint operator +(uint x); long operator +(long x); ulong operator +(ulong x

2、); float operator +(float x); double operator +(double x); decimal operator +(decimal x); 对于以上每个运算符,其结果就是操作数的值。 12 一元负值运算符对于 x 形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。预定义的负值操作符为: 整数取负: int operator (int x); long operator (long x); 结果是 0 减去 x 的计算值。在 checked 环境中,如果 x 的值是最大

3、的负 int 或 long 型整数,将产生 OverflowException 异常(上溢出异常) 。在 unchecked 环境中,如果 x 的值是最大的负 int 或 long 型整数,结果是同一值,并且不报告有溢出。如果取负运算符的操作数是 uint 类型,它会被转换成 long 类型,而且结果的类型也为 long。有一个规则是例外,即允许 int 型值 -2147483648(-231)被写成十进制整数文字(2.5.3.2) 。如果取负运算符的操作数是 ulong 类型,将产生错误。有一个规则是例外,即允许 long 型值 9223372036854775808(-2 63)被写成十进

4、制整数文字(错误!未找到引用源。 ) 。 浮点取负: float operator (float x); double operator (double x); 结果是符号反转的 x 值。如果 x 是 NaN,结果仍是 NaN。 小数取负: decimal operator (decimal x); 结果是 0 减去 x 的计算值。 13 逻辑非运算符 对于!x 形式的操作,一元运算符重载解析(7.2.3 )用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。只有一种预定义的逻辑非运算符: bool operator !(bool x); 该运算符计算

5、操作数的逻辑非:如果操作数是 true,结果就是false;如果操作数是 false,结果就是 true。 14 按位求补运算符对于 x 形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。预定义的按位求补运算符为: int operator (int x); uint operator (uint x); long operator (long x); ulong operator (ulong x); 对于以上每个运算符,操作的结果是 x 的按位补码。 每个枚举类型 E 隐含地提供下列按位求补运算符: E

6、 operator (E x); 当 x 是带有基本类型 U 的枚举类型 E 的表达式,那么 x 的计算结果与 (E)(U)x) 的计算结果完全相同。 15 间接运算符 16 地址运算符 17 前缀增量和减量运算符pre-increment-expression: + unary-expression pre-decrement-expression: - unary-expression 前缀增量或减量运算的操作数必须是变量类表达式、属性访问或索引访问。操作的结果是一个与操作数同类型的值。 如果前缀增量或减量运算是属性或索引访问,该属性或索引必须具有 get 和 set 两个访问函数。如果不

7、是这样,将出现编译错误。 一元运算符重载解析(7.2.3)用于选择特定的运算符实现。预定义的 + 和 - 运算符存在于以下类型中:sbyte、byte、short、ushort、int、uint 、long、ulong 、char、float 、double、decimal 以及任何 enum 类型。预定义的 + 运算符返回值为参数加 1,预定义的 - 运算符返回值为参数减 1。 +x 或 -x 形式的前缀增量或减量操作的运行时处理包括以下几步: 如果 x 为变量: 计算 x 产生变量。 所选运算符被调用时参数为 x 的值。 运算符返回的值存储在 x 的计算值所在的位置。 运算符返回的值成为操

8、作的结果。 如果 x 为属性或索引访问: 计算实例表达式(如果 x 不是 static) 、参数列表(如果 x 是索引访问)和 x,结果用于下面的 get 和 set 访问函数调用。 调用 x 的 get 访问函数。 将 get 访问函数 的返回值作为参数,调用所选运算符。 将运算符的返回值作为 value 参数,调用 x 的 set 访问函数。 运算符返回的值成为操作的结果。 + 和 - 运算符也支持后缀表示法,如 7.5.9 所述。x+ 或 x- 的结果是操作前 x 的值,而 +x 或 -x 的值是操作后 x 的值。在每一种情况下,x 本身在操作后都具有同样的值。 用后缀和前缀表示法都可以

9、调用运算符 + 或运算符 - 的实现。这两种表示法有相同的运算符实现。 18 强制类型转换表达式强制类型转换表达式用于显式地将表达式转换成一个给定类型。 cast-expression: ( type ) unary-expression 设 T 为类型,E 为一元表达式,(T)E 形式的强制类型转换表达式将 E 的值显式地转换(错误!未找到引用源。 )为类型 T。如果没有将 E 的类型显式地转换到 T,将出现错误。另外,结果是显式转换产生的数值。即使 E 表示一个变量,结果也总是一个数值。 强制类型转换表达式的语法导致某些句法歧义。例如,表达式 (x)y 既可以被解释为强制类型转换表达式(将

10、 y 的强制类型转换为类型 x)也可解释为附加表达式与加括号表达式的结合(计算 x y 的值) 。 为解决强制类型转换表达式的多义性,存在以下规则:只有当下列至少一条为真时,包含在括号中的一个或多个标记( tokens) (错误!未找到引用源。 )序列才被认为是强制类型转换表达式: 标记的序列在语法上对类型是正确的,对表达式是不正确的。 标记的序列在语法上对类型是正确的,并且结束括号后紧跟的标记是“” 、 “!”、 “(”、标识符(2.5.1) 、文字( 错误!未找到引用源。 )或除 is 之外的关键字( 错误!未找到引用源。 ) 。 以上规则意味着只有当强制类型转换表达式的结构是明显的,它才被认为是一个强制类型转换表达式。 上述“正确的语法”只意味着标志的序列必须遵从特定语法。它并不考虑构成的标识符的实际意义。例如,如果 x 和 y 为标识符,那么 x.y 对于类型而言语法正确,即使 x.y 实际上不表示一个类型。从所遵从的消除歧义规则来看,如果 x 和 y 是标识符,(x)y 、(x)(y) 和 (x)(-y) 是强制类型转换表达式,但 (x)-y 不是,即使 x 标识一个类型。然而,如果 x 是一个标识预定义类型(如 int)的关键字,那么所有四种形式都是强制类型转换表达式(因为关键字自己不可能是一个表达式) 。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报