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会发生错误。

  三、取余运算:

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

时间: 2024-10-04 13:57:24

C#中的除法运算符和VB.NET中的除法运算符对比的相关文章

vb.net中实现picturebox中图片拖动和label控件数组结合,实现label和图片同步

控件|数组   在前面的文章中,提到过在vb.net中实现picturebox中图片拖动,以及控件数组方面的东西. 因为项目需要,我要实现的是,图片上有各个站点的名称,我要实现点击相应的名称,进入站点,查看相应的信息.我采取的是在图片上放一系列的label,然后点击label,进入相应的站点,这样就遇到了一个问题,要实现在拖动图片的同时,所有的label也同步拖动. 下面的代码实现了这个功能: Imports System.DrawingNamespace WinForm.Main    Pub

vb / C# 中报表套打的轻松实现

关键字: vb c# 报表 套打 微软的crystal report是非常不错的报表工具,今天我想和大家聊聊如果在vb 60 中使用crystal report 提供的环境在vb 中请轻松实现报表的套打功能.以水晶报表9为用例 craxddrt9.dll craxddrt9_res_chs.dll CRDesignerCtrl.DLL crdesignerctrl_res_chs.dll 以上四个dll在你安装好水晶9后会存在你系统环境中.你可以在vb项目中通过浏览文件直接引用这几个dll ,或

Vb6.0 Variant 在 Vb.net 中 Object 的问题

问题描述 Vb6.0代码如下:ConstDATASIZE=459DimglngEnrollDataAsVariantDimvniiAsLongDimvByte()AsByteastrBuff=Rs.Fields("TEMP")'2进制字段vByte=astrBuffForvnii=0ToDATASIZE-1glngEnrollData(vnii)=vByte(vnii*5+1)glngEnrollData(vnii)=glngEnrollData(vnii)*256+vByte(vni

Vb6.0 Variant 在 Vb.net 中 Object 赋值问题

问题描述 Vb6.0代码如下:ConstDATASIZE=459DimglngEnrollDataAsVariantDimvniiAsLongDimvByte()AsByteastrBuff=Rs.Fields("TEMP")'2进制字段vByte=astrBuffForvnii=0ToDATASIZE-1glngEnrollData(vnii)=vByte(vnii*5+1)glngEnrollData(vnii)=glngEnrollData(vnii)*256+vByte(vni

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的

VB中App.Path在VB.NET中怎么写?

问题描述 VB中App.Path在VB.NET中怎么写? 解决方案 解决方案二:Application.StartupPath解决方案三:My.Application.Info.DirectoryPath解决方案四:这两种写法应该是在WINDOWS应用程序中的用法,我建的是ASP.NETWEB应用程序.用以上两种写法会出现Application或是My未声明.解决方案五:WEB应用程序中没有App.Path这个概念...虚拟路径用~运算符...物理路径用MapPath方法...解决方案六:App

在VB.NET中应用SMTP和POP3 服务

在VB.NET中应用SMTP和POP3 服务 介绍 这里介绍的例程代码最小化地展示了SMTP和POP3协议的执行,并且有意地演示VB.NET中的多线程.套接字和输入输出的能力.这个程序需要固定一些目录结构. 应用程序邮箱的目录 C:\Temp\SMTP C:\Temp\SMTP \SPOOL C:\Temp\SMTP \[Pop 3用户名作为目录] 程序也可以向局域网外部发送E-mail,但这就需要依赖于SMTP服务器.本例程中指定了SMTP服务器的硬代码,并且至少要在C:\Temp\SMTP下

VB.NET中的多线程开发

多线程 引言 对于使用VB6的开发者而言,要在程序中实现多线程(multi-thread)功能,一般就是使用Win32 API调用.但凡是进行过这种尝试的开发者都会感觉到实现过程非常困难,而且总是会发生些null terminated strings GPF的错误.可是有了VB.NET,一切烦恼都成为过去. 自由线程(free threaded) 在VB6中,我们只能对组件设置多线程模式,这通常就是单元模式的多线程.对于单元线程组件而言,组件中的每个可执行方法都将在一个和组件相联系的线程上运行.

VB.net中HOOK的应用(一)

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题. 由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析. 一.先来看一下在vb中是如何实现的.截的是空格键.表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:"HOOK成功!" 1.在一个Module中写入下列代码: 调用的API的申明: