C#中的除法运算符和VB.NET中的除法运算符对比

VB.NET中的除法运算符有两个:/(浮点除法)、/(整数除法)

C#中的除法运算符只有一个:/(除法)

VB.NET中的除法运算符与C#中的除法运算符存在很大的差异,使用时注意区分。

关于C#中的除法运算符的介绍(摘自MSDN):

/(除法): 将两个数相除并返回除数和被除数的数据类型中精度高的数据类型。

执行除法前,编译器会将除数和被除数的数据类型统一成两者类型中精度高的数据类型。返回的运算结果的类型也是两者类型中精度高的数据类型。例如:两个整数相除的结果始终为一个整数。 一个整数和一个Double型相除,返回结果为Double型。但是需要注意一点,Double和Decimal不能直接进行算术运算,必须先显式的将两者类型进行统一,之后才能进行运算,Double和Decimal不能直接进行运算的原因是两者之间不能进行隐式的类型转换。

除法运算符 (/) 用第二个操作数除第一个操作数。所有数值类型都具有预定义的除法运算符。
using System;
class MainClass
{
    static void Main() 
    {
        Console.WriteLine(-5/2);
        Console.WriteLine(-5.0/2);
    }}

关于VB.NET中的除法运算符的介绍(摘自MSDN):

/(浮点除法):将两个数相除并返回以浮点数表示的结果。

所得结果的数据类型取决于操作数的类型。 下表显示如何确定结果的数据类型。

操作数数据类型
结果数据类型
两个表达式都是整数数据类型(SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong)
Double
一个表达式为 Single 数据类型,而另一个表达式不为 Double
Single
一个表达式为 Decimal 数据类型,而另一个表达式不为 Single 或 Double
Decimal
任一表达式为 Double 数据类型
Double

执行除法之前,任何整数数值表达式都会被扩展为 Double。 如果将结果赋给整数数据类型,Visual Basic 会尝试将结果从 Double 转换成这种类型。 如果结果不适合该类型,会引发异常。如果除数被除数计算结果等于 Nothing,则将其视为零。

/(整数除法):将两个数相除并返回以整数形式表示的结果。

下表如何确定结果的数据类型。 请注意,此表是对称的;对于给定的操作数数据类型组合,无论操作数的顺序如何,结果数据类型都是相同的。



Boolean
SByte
Byte
Short
UShort
Integer
UInteger
Long
ULong
Boolean
Boolean
SByte
Short
Short
Integer
Integer
Long
Long
Long
SByte
SByte
SByte
Short
Short
Integer
Integer
Long
Long
Long
Byte
Short
Short
Byte
Short
UShort
Integer
UInteger
Long
ULong
Short
Short
Short
Short
Short
Integer
Integer
Long
Long
Long
UShort
Integer
Integer
UShort
Integer
UShort
Integer
UInteger
Long
ULong
Integer
Integer
Integer
Integer
Integer
Integer
Integer
Long
Long
Long
UInteger
Long
Long
UInteger
Long
UInteger
Long
UInteger
Long
ULong
Long
Long
Long
Long
Long
Long
Long
Long
Long
Long
ULong
Long
Long
ULong
Long
ULong
Long
ULong
Long
ULong

如果 / 运算符两个操作数中的任何一个为 Decimal、Single 或 Double,则 Visual Basic 在运算前会尝试将其转换为 Long,并且运算的结果数据类型为 Long。如果 Option Strict 为 On,将产生编译器错误。 如果 Option Strict 为 Off,若值超出 Long 数据类型 (Visual Basic) 的范围,则可能会产生 OverflowException。 转换为 Long 也服从“四舍六入五成双”。如果除数被除数计算结果等于 Nothing,则将其视为零。

一、“/”运算符:

C#中默认的“/”是取整除法(不四舍五入)。譬如C#中1/2默认返回一个整数0.

但是VB.NET中“/”返回一个Double类型的数值(相当于C#中1.0/2的效果)。

在做这类运算时候,VB.NET会把被除数和除数提升到Double类型因此1/0在VB.NET不是错误(因为这个表达式被解析成:1/CDbl(0))。结果CDbl(0)是一个接近于0的,但不是等于0的浮点数(可以理解为“正无穷小”),那么结果是“正无穷大”。但C#在做"/"时候,由于两个都是整数,因此直接做整数相除,抛出异常(如果尝试在C#中1.0/0,可以得到和VB.NET中一样的结论)。

二、“/”运算符:

这是VB.NET独有的,和C#的“/”一致。值得注意的是如果双方有一个浮点数,取整结果默认转化为Long(Int64)。此时1/0会发生错误。

三、取余运算:

C#中是“%”,VB.NET是Mod,类型按照实际结果决定。

网友评论
最新图文
  • 用WPF搭建自己的P2P 播放器

    本次是用WPF实现的是一款基于BT协议的P2P 播放器。内核是用vlc来实现。结果辛辛苦苦做了半天结果发现用wpf不能满足公司一些需求。所以搁浅,专用winform去开发,主要2个原因:1、界面美观时发现渲染视频的时候会有问题,这个问题等会会讲。2、主要原因,西西hvbet688园-最安全的下载资讯站。

  • C#操作摄像头实现拍照监控录像功能

    从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能。其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个。本来是说周末给做的,但是这两天脑子一直很乱,也没静下来,西西hvbet688园-最安全的下载资讯站。

  • C#数字图像处理的3种方法::提取像素法、内存法和指针法

    本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和Graphics类是C#处理图像的的3个重要的类。Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: Ge,西西hvbet688园-最安全的下载资讯站。

  • .NET反编译神器ILSpy怎么用?

    说起.NET反编译,这里提起一下Visual Studio的垄断。Visual Studio占据了.NET开发工具系列的绝对垄断地位。在.NET 1.x时代,还有C# Builder,Delphi.NET来使用和体验,一争高低。可是到后来,.NET Framwork更新频繁,动辙在编译器级别,和语言层面做更新,这令第三方,西西hvbet688园-最安全的下载资讯站。

  • Reflector反编译插件Reflexil 图文使用教程

    Reflexil 它是Reflector的一个插件,结合Reflector,可以进行DLL代码注入等工作,实践证明完全可用,方便开发人员对.NET程序进行修改;可以作为一个Reflector插件修改程序集的IL并保存到磁盘文件,也可以在自己的.NET程序中调用进行更为灵活的.NET程序集修改。,西西hvbet688园-最安全的下载资讯站。