澳门至尊网站-首页

您的位置:澳门至尊网站 > 免费资源 > 中的算术运算,的类型与变量

中的算术运算,的类型与变量

2019-10-20 09:27

应用当中变量交流多个int型变量的值:

思多雅[天行健] 发表时间:2008.11.09
    在后边的多少个章节中,大家学习了C#的基本概念,那风华正茂章,大家来学学C#的花色与变量。
    C#语言的连串被分成三类:数值类型、援引类型和指针类型。
       type:
           value-type
           reference-type
           poin ter-typ e
    注意:指针类型只可以用在不安全代码,大家在后面的章节中会实行特别的研究。
    数值类型与引用类型所例外的是,数值类型变量直接含有它们的数码,但是援引类型的变量存款和储蓄对它们的数额的引用,正是末端要介绍的靶子。对于援引类型,恐怕会见世四个变量援用一样对象的状态,那样对于四个变量的的操作就有十分大可能率影响到由其余变量引用的对象。对于数值类型,各类变量都有它们本人对数码的正片,那样就不容许出现一个对变量的操作影响到别的一个的景观。
    C#的项目系统是联合的,这样任何类型的数量都得以被作为对象。C#中的任何项目都一向或直接地从objiect 类类型派生,而object 是独具品类的最基本类类。引用类型的数值被当做通过对象,那些指标通过把数值作为类型对象来简化。数值类型的数值通过包装和解包操作来被看作对象。

int a = 29;

int b = 10;

a = a+b;

b = a-b;

a = a-b;

-------思多雅[天行健]版权全部,首发印度洋论论坛,转发请注脚-------

 

一、C#的数值类型
    数值类型既是叁个构造类型也是枚举类型。C#提供了一花样许多预订义结构类型,称为简单类型。轻便类型通过保留字钦定,何况越来越分成数字类型,整数类型和浮点数类型。
       value-type :
           struct-typ e
           enum-type
       struct-typ e:
           type-name
           simp le-type
       simp le-type :
           numeric-type
           bool
       numeric-type :
           integral-type
           floa ting-point-type
           decimal
       integral-type :
           sbyte
           byte
           short
           ushort
           int
           uint
           long
           ulong
           char
      floa ting-point-type:
         float
         double
      enum-type :
         type-name
    全体数值类型都隐式地从类object 承继。不容许任何类型从数值类型派生,因此数值类型是被暗中同意密闭的。
    多个数值类型的变量常常包罗贰个那连串型的数值。不像引用类型,数值类型的数值无法为null 或是援引二个尤为派生类型的变量。
    对有个别数值类型的变量赋值就能够创立二个对所赋数值的正片,它复制了引用实际不是引用所钦定的对象。

相信我们十分轻便写出来,但思考到边界值意况时会有一点有趣的政工。

1.1 暗中同意构造函数
    全数种类都隐含地注解了贰个集体的无参数的构造函数,称为暗许构造函数。私下认可构造函数重临三个起头值为零的实例,为数值类型的暗许数值:
  对于具备单独项目,暗中同意数值是由一个零位格式爆发的数值:
  对于sbyte、byte、short、ushort、int、uint、long和ulong,私下认可的数值为0。
  对于char,暗中同意的数值为'x0000'。
  对于float,默许的数值是0.0f。
  对于double,默许的数值为0.0d。
  对于decimal,私下认可的数值为0.0m。
  对于bool,私下认可的数值为false。
  对于三个枚举类型E,私下认可数值是0。
  对于组织类型,私下认可数值是把具备数值类型域设为它们的默许类型况兼把持有援引类型域设为null的数值。
    像任何任何构造函数同样,一个数值类型的暗中同意的构造函数用new 操作符调用。在底下的例子中,变量i 和j 都从头化为0。
      class A
      {
         void F() {
            int i = 0;
            int j = new int();
          }
      }
    如上所示,因为每一种数值类型蕴涵的都有国有无参数构造函数,所以让一个组织类型满含一个表面注解的无参数构造函数是不容许的。一个结构类型可以允许声Bellamy(Dumex)个参数化的构造函数。举例
      struct Point
      {
         int x, y;
public Point(int x, int y) {
             this.x = x;
             this.y = y;
           }
       }
    假设已经付诸上边的宣示,那么语句
       Point p1 = new Point();
       Point p2 = new Point(0, 0);
    都会制造多个Point,个中x 和y 被伊始化为0。

咱俩知道有一个int.马克斯Value和int.MinValue表示int型的最大值和纤维值。

1.2 结构类型
    二个结构类型是叁个数值类型,它能够评释构造函数、常数、域、方法、属性、索引、操作符和嵌套类型。结构类型在第11章中陈说。

当我们一直定义:int a = int.马克斯Value + 1的时候,编写翻译器会唤醒出错:

1.3 轻易类型
    C#提供了一文山会海的预约义结构类型,称为轻松类型。那些轻巧类型通过首要词显著,然则那么些关键词可认为在System 名称空间中的预约义结构类型主要词起轻易的外号,就如上面表中所示。
   关键字                有小名的体系
   sbyte              System.SByte
   byte               System.Byte
   short              System.Int16
   ushort             System.Uint16
   int                System.Int32
   uint               System.Uint32
   long               System.Int64
   ulong              System.Uint64
   char               System.Char
   float              System.Single
   double             System.Double
   bool               System.Boolean
   decimal            System.Decimal
    二个轻松类型和它有小名的布局类型是不行分辨的。换句话说,当写下保留字byte 时和写System.Byte确实并未有怎么不相同,並且用System.Int32 也与用保留字int 同样。
    因为八个简练类型代表了一个布局类型,所以每一个容易类型都有成员。举例,int 有在System.Int32 中宣称的积极分子和从System.Object 中三回九转的成员,并且下边包车型大巴口舌是同意的:
      int i = int.MaxValue;           // System.Int32.MaxValue constant
      string s = i.ToString();        // System.Int32.ToString() instance method
      string t = 123.ToString();      // System.Int32.ToString() instance method
    注意,整数文字上是int 类型数据,並且还要也是System.Int32 结构类型的数目。
回顾类型与别的协会类型,其余协会类型允许包蕴附加操作符:
  大好些个轻巧易行类型允许通过使用文字来创立(§错误!未找到援用源。)。比如,123 是int 类型量,而'a'是字符类型量。C#使得不用对其余协会类型文字进行预约义,而任何组织类型数据大概是因此那多少个组织类型的构造函数来创建。
  当贰个表明式的演算符都是简约类型常数时,编写翻译器在编写翻译时就可以对这些表达式进行赋值。那样三个表达式称为常数表达式(§错误!未找到援用源。)。蕴含其余协会类型定义的操作符的表达式经常意味着运维时赋值。
  通过const 注脚,就有非常的大也许声美赞臣(Meadjohnson)个简短类型(§10.3)的常数。比非常的小概有任何组织类型的常数,然而static readonly 域提供了相似的效果。
  满含不难类型的调换能够参预由其他协会类型定义的调换操作符的赋值,可是客商定义的转移操作符不可能插手别的一个客户定义操作符的赋值。

 图片 1

1.4 整数类型
    C#支撑九种大背头品种:sbyte、byte、short、ushort、int、uint、long、ulong和char。那几个整数类型有上面包车型大巴分寸和数值范围:
  sbyte类型表示有号子的8位整数,数值范围为-128到127。
  byte类型表示无符号8 位整数,数值范围为0 到255。
  short类型表示有标识13个人整数,数值范围为-32768 到32767。
  ushort类型表示无符号拾三个人整数,数值范围为0 到65535。
  int类型表示有暗记32 位整数,数值范围为–2147483648 到2147483647。
  uint类型表示无符号32 位整数,数值范围为0 到4294967295。
  long类型表示有号子64 位整数,数值范围为–9223372036854775808 到9223372036854775807。
  ulong类型表示无符号64 位整数,数值范围为0 到18446744073709551615。
  char类型表示无符号十八个人整数,数值范围为0 到65535。char类型的可能数值集相符Unicode字符集。
卡尺头门类一元和二元操作符总是按有标记32 位精度、无符号32 位精度、有暗号陆拾人精度或无符号62人精度实行操作。
  对于一元+和~操作符,操作数被转变为类型T,这里T 是int、uint、long 和ulong 中首先个能够完全意味着操作数的具有非常的大希望值的花色。操作使用项目T 的精度来促成,而结果的精度也是T。
  对于一元操作符-,操作数被转移为类型T,这里T 是int 和long 中首先个能够完全意味着操作数的保有不小或者值的等级次序。操作使用项目T 的精度来促成,而结果的精度也是T。一元操作符-无法运用于ulong 类型操作数。
  对于二元操作符+、–、*、/、%、&、^、|、==、!=、>、<、>=和<=操作符,操作数被转变为类型T,这里T 是int、uint、long 和ulong 中第二个能够完全意味着操作数的具备比非常的大可能率值的门类。操作使用项目T 的精度来贯彻,而结果的精度也是T (或相关操作符bool )。
  对于二元操作符<<和>>操作符,操作数被更动为类型T,这里T 是int、uint、long 和ulong 中首个能够完全代表操作数的具有望值的品种。操作使用项目T 的精度来促成,而结果的精度也是T

 

char 类型被归类为风流洒脱种整数类型,可是它在两点上区别于此外整数类型:
  未有从另外项目到字符类型的蕴藏的转变。以至,固然sbyte、byte和ushort类型的多少完全能够用char类型代表,但是从sbyte、byte和ushort类型到char 的包含转变也不设有。
*  char 类型的常数必须写成字符文字。字符常量能够只是写成与三个斜杠结合的板寸文字。举例,(char)10与'x000A'相同。
    checked和unchecked操作符和话语用来控检整数类型算术操作和改动(§7.5.13)的溢出。在风姿罗曼蒂克段checked上下文中,多个溢出产生三个编写翻译时不当或许孳生扔出一个OverflowException。在生机勃勃段unchecked 的光景文里,溢出被忽视况且没有须要送到对象项目的另外高等位被撇下。

在注解x变量时先后编写翻译会报错。

1.5 浮点类型
C#援救三个浮点类型:float和double。float和double类型用34个人单精度和六18位双精度IEEE754格式来表示,它提供了大器晚成多级数值:
  正零和负零。在大好些个景观下,正零和负零与轻便的零值一样,可是它们的施用个中有生意盎然部分界别。
  正无穷大和负无穷大。无穷大是由三个非零成员除以零的操作发生的。举例,1.0/0.0发出正无穷大,而–1.0/0.0发出负无穷大。
  非数字数据,平时缩写为NaN 。NaN 是低效的浮点数操作爆发的,举例零除以零。
  形如s × m × 2e  的非零数占领限集,这里s 是1 要么-1,而m 和e 由具体浮点数类型决定:对于float,0 < m < 224  和-149 ≤e ≤ 104,对于double,0 < m < 253  和-1075 ≤e ≤ 970。
float 类型能够表示的数值范围大概从1.5 × 10-45  到3.4 × 1038 ,有7 位数字位精度。
double类型能够表示的数值范围大概从5.0 × 10-324  到1.7 × 10308 ,有15 到十五位数字位精度。
倘使二元运算符的一个操作数是浮点类型,那么其余操作数必需是整数类型只怕是浮点数类型,并且操作按下边求值:
  借使四个操作数是整数类型,那么这一个操作数会被调换为与任何操作数同样的浮点数类型。
  如若操作数是double 类型,其余操作数将要改造为double,操作就要遵从double 类型的界定和精度来进行,而且总括的结果也是double 类型(对于有关操作,恐怕是bool)。
  否则,操作最少使用float 的限量和精度,何况总计的结果也是float 类型 (对于有关操作,或然是(bool )。
   
    满含赋值操作符的浮点操作符,从不发生分外。在非凡情状下,浮点数操作会爆发上边介绍的零、无穷大或NaN 作为代表:
  假诺浮点数操作的结果对于指标方式来讲太小,操作的结果就能够转移为正零或负零。
  假若浮点数操作的结果对于目的格局来讲太大,操作的结果就能够转换为正无穷大或负无穷大。
  假诺浮点数的操作是无效的,操作的结果就能转换为NaN 。
  假设三个或享有浮点操作的操作数都以NaN,那么操作的结果就改成NaN 。
    浮点数操作能够用比操作结果的种类越来越高的精度来践行。举个例子,一些硬件结构支持一个比double 类型越来越大规模和越来越高精度的“扩张的”或“long double”浮点数类型,况且会隐含地使用那么些更高的精度来实现浮点数操作。独有在性质要格外付出时,那样的硬件结构才会被用来得以达成精度小部分的浮点数操作,而无需实践同有时间丧失质量和精度,C#同意具有的浮点数操作使用更加高的精度类型。与付出越来越高精度的结果差异,这样差不离没有别的可度量的熏陶。在形如x *y/ z 的表明式中,这里的乘法发生多个超过double 类型范围的结果,可是前面包车型大巴除法带来二个赶回double 范围的偶尔结果,实际上在大学一年级些的限制方式总括那几个表明式会发生有限的结果并非Infiniti大。

但下边声明的变量a,b实行相加时可以确定的是出新了算术溢出乖谬,但却仍是可以获取不错的结果。

1.6 十进制类型
    十进制类型是三个1贰十七位数据类型,适合经济和货币总括。十进制类型能够表示的数值范围是从      -28          28
1.0 × 10 到概况7.9 × 10 ,有28 到29 个有效数字位。 e ,这里s 是1 还是-1,0 ≤m < 296 而-28 ≤e ≤ 0 。
十进制
十进制类型数值的个别群集格局为s × m × 10
品类不帮助有标识零、无穷大和NaN 。
    一个十进制数由96 位整数和十二位幂表示。对于一个万万数值低于1.0m 的十进制数,数据正是第贰十八个十进制位,但是尚未越来越多。对于相对值超越或等于1.0m 的十进制数,数据大概是28 或29 数字位。与float 和double 类型相比,如0.1 的十进制小数成员能够就用十进制表示。在用float 和double 表示时,那样的分子平时为Infiniti小数,使得这一个代表有更加大的舍入误差。
     如若一个二元操作符的操作数是十进制类型,此外操作数也必得是整数类型或十进制类型。假诺要选择三个整数品种操作数,在操作被实行前它会被转移为十进制数。
    十进制类型的数值的操作正是28 或29 数字位,不过不会多于28 十进制位。结果为最相仿的可代表的数值,当结果与八个可代表数值都间隔都十一分时,选取在一点都不大数据位上为奇数的数值。
    假诺十进制算术操作爆发了多个在舍入后对于十进制格局太小的多少,操作的结果就变为零。若是贰个十进制算术操作发生了四个对此十进制形式太大的数量,就能够抛出二个OverflowException错误。
    十进制类型比浮点类型有更加高的精度然则有更加小的限制。那样,从浮点数类型转变来十进制类型只怕会发生溢出的那么些,並且从十进制类型转变来浮点数类型可能会有精度损失。出于那个原因,子虚乌有浮点数类型和十进制类型间的隐式转变,何况也未有显式的图景,在同叁个表明式中把浮点数和十进制操作数混合在联合是不大概的。

 图片 2

1.7 布尔类型
    bool类型表示布尔逻辑量,bool类型的或是值为true和false。
    在bool 和其他类型间不设有规范的改动。极度是,bool 类型与整数类型楚河汉界,bool 数据不可能用于采用整数等级次序的地点,反之亦然。
    在C 和C++语言中,零整数值或空指针能够被改换为布尔数值false,而非零整数数值或非空指针能够转移为布尔数值true 。但在C#中,那样的调换由显式地把整数数值和零比较或显式地把指标和null 相比来促成。

 

4.1.8 枚举类型
枚举类型是后生可畏种有名称常数的特别类型。每一种枚举类型都有前级类型,能够是byte、short、int或long。枚举类型通过枚举例证明明来定义。

在施行完a = a+b后开采a的值产生了-3

-------思多雅[天行健]版权全数,首发印度洋论论坛,转发请申明-------

 图片 3

计算,大家要多介怀一下C#与C++及C语言中指针及项指标自己检查自纠。临时一点都不小心,就能够引起出错,在自己钻探时,留意查看那上头就是了。

 

而背后两步总结均能搜查缉获正确的结果….

 图片 4

 

解释:参照他事他说加以考察msdn操作符说明:

 

操作符重载和隐式调换:

 

 

算术溢出

算术运算符(+、-、*、/)的猜想结果或然会超过所涉数值类型的可取值范围。 详细音信应仿效特定运算符的连带章节,而相似情状下:

  • 板寸算术溢出或然吸引 OverflowException,可能甩掉结果的参天有效位。 整数被零除总是吸引 @System.DivideByZeroException。

发生整数溢出时,具体影响视实践上下文而定,上下文可为 checked 或 unchecked。 在 checked 上下文中引发 OverflowException。 在 unchecked 上下文中,放弃结果的最高有效位并继续试行。 由此,C# 令你有机缘采取管理或忽视溢出。 暗中认可景况下,算术运算爆发在 unchecked 上下文中。

除算术运算以外,整型类型之间的显式转变也会招致溢出(比方,将 long 显式转变来 int),并饱受 checked 或 unchecked 实践的束缚。 但是,位运算符和活动运算符永恒不会招致溢出。

  • 浮点算术溢出或被零除从不引发那多少个,因为浮点类型基于 IEEE 754,由此可以表示无穷大和 NaN(非数值)。
  • 小数算术溢出总是吸引 OverflowException。 小数被零除总是吸引 DivideByZeroException。

 

 

总括:大大多景况下数值总结很稀有时机谋面溢出,但具体特殊现象应切实相比。

如:

1,  变量初叶化时给定为int.马克斯Value,在选拔时必然要思念计算溢出。

2,  在大方的大循环或递归中总计时有十分的大也许会形成算术溢出。

3,  从IO输入设备中取值,尤其是顾客输入的值中很有希望是一个溢出的不行输入。

4,  注意.NET CLENVISION暗中认可意况下算术运营是爆发在unchecked上下文。假如发生算术溢出,程序不会出错,大概获得不错或不当的结果。

 

 

 

本文由澳门至尊网站发布于免费资源,转载请注明出处:中的算术运算,的类型与变量

关键词: