• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#学习第三弹之给常量赋值可能引发的问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

C#是一种强类型的语言,即变量必须先声明类型才能够使用,且变量的使用需要完全符合定义。也就是说,一旦一个变量被指定了数据类型,那么如果不经过类型转换,它永远都是这个数据类型。于此相对,弱类型语言是数据类型可以忽略的语言,一个变量可以赋予不同的数据类型的值。

C#支持隐式类型转换:

1 static void Main(string[] args)
2 {
3     short a = 6;
4     int b = a;
5 }

但是如下代码:

1 static void Main(string[] args)
2 {
3     int a = 6;
4     short b = a;
5 }

却会报错,提示:“错误 1 无法将类型“int”隐式转换为“short”。存在一个显式转换(是否缺少强制转换?) ”。

将int转化为short是危险的,所以C#并不鼓励程序员这样做。

如果一定要这样写,可以改成显式的类型转换:

1 static void Main(string[] args)
2 {
3     int a = 6;
4     short b = (short)a;
5 }

不过作为程序员,应该留意这条语句可能带来的问题。

接下来来看这样一段程序:

1 static void Main(string[] args)
2 {
3     short a = 0xffff;
4     Console.WriteLine(a);
5 }

我们要做的是将0xffff(-1)赋给short型变量a,看似好像没有任何问题,但编译器提示:

错误 1 常量值“65535”无法转换为“short”

原因是在C#中的十六进制常量默认是int型的,直接赋值给一个short型的变量显然行不通。

那么如果我们加上显式的类型转换是否就可以了呢?

1 static void Main(string[] args)
2 {
3     short a = (short)0xffff;
4     Console.WriteLine(a);
5 }

编译依旧不过,只是错误提示发生了变化:

错误 1 常量值“65535”无法转换为“short”(使用“unchecked”语法重写)

看来编译器还是不允许我们这样做,试一下unchecked重写:

1 static void Main(string[] args)
2 {
3     unchecked
4     {
5         short a = (short)0xffff;
6         Console.WriteLine(a);
7     }
8 }

发现终于可以了!

unchecked语法的作用:用于取消整型算术运算和转换的溢出检查。

随后发现C#对溢出有很严格的检查,诸如:int a = 2147483647 * 2; 和 int a = 2147483647 + 1; 的语句正常情况都是不能通过编译的,2147483647是int能表示的最大值。

而unchecked语法的存在又使得这些语句可以被执行,心中忽然觉得C#这门语言虽然很杂(支持超多关键字和语法),但是许多特性还是很实用的。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
浅谈C#中常见的委托Func,Action,Predicate(转)发布时间:2022-07-13
下一篇:
IOSObjectCid,class,sel,bool发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap