Chinaunix首页 | 论坛 | 博客
  • 博客访问: 744053
  • 博文数量: 769
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4985
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:37
文章分类

全部博文(769)

文章存档

2011年(1)

2008年(768)

我的朋友

分类:

2008-10-15 16:39:17

        有了前次float类型的教训以后,我开始复习的数据类型,今天在网上发现一篇有意识的文章:

        short s=0;
        s = s + 1;
        和
        short s=0;
        s += 1;

        这两个表达式有什么区别,会报什么错误?

        还是用事实来说话。:

        经:

        第一个会报错:错误 1 无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?) E:\MVC\Test\Test\Form1.cs 40 17 Test

        第二个通过编译,运行正常。

        后来找到解释:

        s = s + 1; 由于 1 默认是int型的,s是short的,"s+1"的结果默认是int的,把int的结果赋值给short时会报错,损失精度了,必须写成 s = (short)(s+1) 来强制转化一下

        s+=1; 在编译时已经明确最后要赋值给s,即short型的,所以会在内部自动进行转换的,

        自动转换一般从低的往高的转换,所以第一个会报错

        顺便把的数据类型贴上,大家一起复习:

        #是基于Microsoft的.net框架的,他的基础部分就是共享的通用类型系统(CTS,Common Type System)。下面是和java数据类型的等价类型。

 c#数据

类型

java数据

类型 

运行时

类型

大小

(字节)

范围  描述 
 bool   boolean   Boolean  n/a  true or false  布尔值 
 byte    Byte  1  0~255  无符号整数
 char  char  Char  2  0x0000~0xffff  Unicode字符
 decimal     Decimal  

 -79,228,162,514,264,337,593,543,950,335~

79,228,162,514,264,337,593,543,950,335

 十进制数字
 double  double  Double  8

 -1.79769313486232e308~

1.79769313486232e308

 双精度64位数字
 float  float  Single  4  -3.402823e38~3.402823e38  单精度32位数字
 int  int  Int32  4  -2,147,483,648~2,147,483,647  有符号整数
 long  long  Int64  8

 -9,223,372,036,854,775,808~

9,223,372,036,854,775,807

 有符号整数
 sbyte  byte  SByte  1  -128~127  有符号整数
 short  short  Int16  2  -32768~32767  有符号整数
unit    UInt32  4  0~4,294,967,295  无符号整数
 ulong    UInt64  8  0~184,467,440,737,095,551,615  无符号整数
 ushort    UInt16  2  0~65535  无符号整数

        在c#中,所有书类型也都是System的一部分,可以在其中引用。如bool可以引用为System.Boolean

【责编:michael】

--------------------next---------------------

阅读(324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~