c# 一元表达式.docx_第1页
c# 一元表达式.docx_第2页
c# 一元表达式.docx_第3页
c# 一元表达式.docx_第4页
c# 一元表达式.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 一元表达式1.1 一元正值运算符1.2 一元负值运算符1.3 逻辑非运算符1.4 按位求补运算符1.5 间接运算符1.6 地址运算符1.7 前缀增量和减量运算符1.8 强制类型转换表达式1. 一元表达式unary-expression: primary-expression + unary-expression - unary-expression ! unary-expression unary-expression * unary-expression & unary-expression pre-increment-expression pre-decrement-expression cast-expression 1.1 一元正值运算符对于 +x 形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。预定义的一元正值运算符为: int operator +(int x); uint operator +(uint x); long operator +(long x); ulong operator +(ulong x); float operator +(float x); double operator +(double x); decimal operator +(decimal x); 对于以上每个运算符,其结果就是操作数的值。 1.2 一元负值运算符对于 x 形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。预定义的负值操作符为: 整数取负: int operator (int x); long operator (long x); 结果是 0 减去 x 的计算值。在 checked 环境中,如果 x 的值是最大的负int 或 long 型整数,将产生 OverflowException 异常(上溢出异常)。在 unchecked 环境中,如果 x 的值是最大的负int 或 long 型整数,结果是同一值,并且不报告有溢出。如果取负运算符的操作数是 uint 类型,它会被转换成 long 类型,而且结果的类型也为 long。有一个规则是例外,即允许 int 型值 -2147483648(-231)被写成十进制整数文字(2.5.3.2)。如果取负运算符的操作数是 ulong 类型,将产生错误。有一个规则是例外,即允许 long 型值 9223372036854775808(-263)被写成十进制整数文字(错误!未找到引用源。)。 浮点取负: float operator (float x); double operator (double x); 结果是符号反转的 x 值。如果 x 是 NaN,结果仍是 NaN。 小数取负: decimal operator (decimal x); 结果是 0 减去 x 的计算值。 1.3 逻辑非运算符 对于!x形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。只有一种预定义的逻辑非运算符: bool operator !(bool x); 该运算符计算操作数的逻辑非:如果操作数是true,结果就是false;如果操作数是 false,结果就是 true。 1.4 按位求补运算符对于 x 形式的操作,一元运算符重载解析(7.2.3)用于选择特定的运算符实现。操作数被转换成所选运算符的参数类型,结果的类型是该运算符的返回类型。预定义的按位求补运算符为: int operator (int x); uint operator (uint x); long operator (long x); ulong operator (ulong x); 对于以上每个运算符,操作的结果是 x 的按位补码。 每个枚举类型 E 隐含地提供下列按位求补运算符: E operator (E x); 当 x 是带有基本类型U 的枚举类型 E 的表达式,那么 x 的计算结果与 (E)(U)x) 的计算结果完全相同。 1.5 间接运算符 1.6 地址运算符 1.7 前缀增量和减量运算符pre-increment-expression: + unary-expression pre-decrement-expression: - unary-expression 前缀增量或减量运算的操作数必须是变量类表达式、属性访问或索引访问。操作的结果是一个与操作数同类型的值。 如果前缀增量或减量运算是属性或索引访问,该属性或索引必须具有 get 和 set 两个访问函数。如果不是这样,将出现编译错误。 一元运算符重载解析(7.2.3)用于选择特定的运算符实现。预定义的 + 和 - 运算符存在于以下类型中:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal以及任何 enum 类型。预定义的 + 运算符返回值为参数加 1,预定义的 - 运算符返回值为参数减 1。 +x 或 -x形式的前缀增量或减量操作的运行时处理包括以下几步: 如果 x 为变量: 计算 x 产生变量。 所选运算符被调用时参数为 x 的值。 运算符返回的值存储在 x 的计算值所在的位置。 运算符返回的值成为操作的结果。 如果 x 为属性或索引访问: 计算实例表达式(如果 x 不是 static)、参数列表(如果 x 是索引访问)和 x,结果用于下面的 get 和 set 访问函数调用。 调用 x 的 get 访问函数。 将 get 访问函数 的返回值作为参数,调用所选运算符。 将运算符的返回值作为 value 参数,调用 x 的 set 访问函数。 运算符返回的值成为操作的结果。 + 和 - 运算符也支持后缀表示法,如 7.5.9 所述。x+ 或 x- 的结果是操作前 x 的值,而 +x 或 -x 的值是操作后 x 的值。在每一种情况下,x 本身在操作后都具有同样的值。 用后缀和前缀表示法都可以调用运算符 + 或运算符 - 的实现。这两种表示法有相同的运算符实现。 1.8 强制类型转换表达式强制类型转换表达式用于显式地将表达式转换成一个给定类型。 cast-expression: ( type ) unary-expression 设 T 为类型,E 为一元表达式,(T)E 形式的强制类型转换表达式将 E 的值显式地转换(错误!未找到引用源。)为类型 T。如果没有将 E 的类型显式地转换到 T,将出现错误。另外,结果是显式转换产生的数值。即使 E 表示一个变量,结果也总是一个数值。 强制类型转换表达式的语法导致某些句法歧义。例如,表达式 (x)y 既可以被解释为强制类型转换表达式(将 y 的强制类型转换为类型 x)也可解释为附加表达式与加括号表达式的结合(计算 x y 的值)。 为解决强制类型转换表达式的多义性,存在以下规则:只有当下列至少一条为真时,包含在括号中的一个或多个标记(tokens)(错误!未找到引用源。)序列才被认为是强制类型转换表达式: 标记的序列在语法上对类型是正确的,对表达式是不正确的。 标记的序列在语法上对类型是正确的,并且结束括号后紧跟的标记是“”、“!”、“(”、标识符(2.5.1)、文字(错误!未找到引用源。)或除 is 之外的关键字(错误!未找到引用源。)。 以上规则意味着只有当强制类型转换表达式的结构是明显的,它才被认为是一个强制类型转换表达式。 上述“正确的语法”只意味着标志的序列必须遵从特定语法。它并不考虑构成的标识符的实际意义。例如,如果 x 和 y 为标识符,那么 x.y 对于类型而言语法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论