C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换
区别:
- 隐式转换失败编译会报错。
- 显示转换有可能精度丢失。
- 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果。
- 在数字运算时,会有默认的隐式转换
一、隐式转换
val1 = val2; // 写法简单。即 一个变量val2 赋给 另一个变量val1
从小范围到大范围。如 byte的取值范围是 0 ~ 255, short的范围是 0~32677 所以 byte类型的变量 a 可以赋给 short类型的变量b。
反之 short 类型的赋给 byte 编译会报错。如果非要转的话 就用到 显式转换(强制转换)。
二、显式转换
格式:
1.类型 valA = (类型2) valB;
2.类型 valA = Convert.To类型2(valB);
1) 强制转换会有精度丢失的问题。
如
short shortNum = 281;
byte byteVal = (byte)shortNum;// byte 会赋值 25
// 因为 281 = 1,0001,1001
// 25 = 0,0001,1001
// 255 = 0,1111,1111
// 即 255最多取 8位,从第9位开始就舍弃了。
2)用 checked关键字 检测是否溢出。
如
short shortNum = 281;
byte byteVal = checked((byte) shortNum); // 运行到该行会报错。"Arithmetic operation resulted in an overflow."
unchecked关键字 表示忽略溢出检查,和 checked写法类似。
3)
System.Convert.ToXXX(val); // 转换基本类型,都会执行溢出检测(即效果类似默认都加了 checked 判断)。
三、运算时的默认隐式转换
如 两个 short 相乘的结果 很大概率超过 short 上限,所以返回的结果是 int 类型的。
doubleRe = floatVal + (shortVal * floatVal);
混合运算时,根据运算优先级
1)计算 * ,将 shortVal 转换成 float 类型
2)计算 + ,float 和 float 相加不会类型转换。
3)= 时,将结果转换为 double。
查看变量类型可以用 val.GetType() 函数。
C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换的更多相关文章
- Java中byte、short、char、int、long运算时自动类型转化问题
-------------------------------------------------------------------------------------------------- ★ ...
- C#的隐式和显示类型转换
原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/7494577 关于隐式转换和显示转换,每种语言都有的,C#中当然也不例外. ...
- C#之隐式与显示类型转换
今天在看一篇有关数据类型的文章的时候,无意间看到了两个关键词,"隐式转换"与"显示转换",然后突然想起了当初开始学编程的时候,也总是在代码编译的时候遇到这样的问 ...
- php运算时默认的类型转换
php属于弱类型语言,使用数据时无需指定其数据类型.对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼. 总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算 ...
- 我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换
今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static vo ...
- js在运算时的类型转换
日期类型与数字类型的运算 在加法时将日期对象与数字都当作字符串进行连接 字符串的运算方式中没有减法.乘法.除法.转化成数字类型进行运算 字符串类型字符与数字类型的运算 在加法时将二者都转换成字符串进行 ...
- sql server 中进行除法运算时,如何得到结果是小数形式呢?
我们正常进行除法运算时,sql默认是返回一个四舍五入的数 比如12除以5,17除以3 --算法1:返回结果:2 需要的是2.40 ) as 结果1 --算法2:返回结果:5 需要的是5.67 ) as ...
- 【C++自我精讲】基础系列五 隐式转换和显示转换
[C++自我精讲]基础系列五 隐式转换和显示转换 0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐 ...
- [Effective Modern C++] Item 6. Use the explicitly typed initializer idiom when auto deduces undesired types - 当推断意外类型时使用显式的类型初始化语句
条款6 当推断意外类型时使用显式的类型初始化语句 基础知识 当使用std::vector<bool>的时候,类型推断会出现问题: std::vector<bool> featu ...
随机推荐
- 解决ie img标签内存泄漏
代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...
- NIO-直接内存
写NIO程序经常使用ByteBuffer来读取或者写入数据,那么使用ByteBuffer.allocate(capability)还是使用ByteBuffer.allocteDirect(capabi ...
- Media change : please insert the disk labeled
在Debian中使用apt-get安装软件包时经常会提示让你插入netinst的光盘: Media change: please insert the disc labeled 当没有时就无法进行安装 ...
- 基于SSH的网上体育用品商城-JavaWeb项目-有源码
开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 网上体育商城的主要功能包括:前台用户登录退出.注册.在线购物.修改个人信息.后台商品管理等等.本系统结构如下 ...
- centos7无GUI运行selenium chromedriver 亲测可用!
1. 安装chrome 首先安装google的epel源 vi /etc/yum.repos.d/google.repo [google] name=Google-x86_64 baseurl=htt ...
- “全栈2019”Java多线程第六章:中断线程interrupt()方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java-File类获取目录下文件名-遍历目录file.listFiles
package com.hxzy.IOSer;import java.io.*;/*File 类获取功能 * List * ListFile * */public class Demo06 { pub ...
- 浅析group by,having count()
SELECT COUNT(*) FROM (SELECT COUNT(id),order_type,city_id,category_id,major_category_id,puid,user_id ...
- javascript解决getElementById()的bug以及getElementsByClassName的兼容性写法
<a name="target" href="#">链接</a> <p id="target">文字说明 ...
- Linux 中使用 virsh 管理 KVM 虚拟机 (转)
术语 虚拟化指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作宿主机(host).虚拟机监视器(也被称为虚拟机管理程序(hyperv ...