VB.NET和C#的BinaryShift区别我刚在翻译一些数据的时候发现了一个有趣的问题:CByte(4)<<8返回4但是C#:((byte)4<<8返回1024,也就是说,为什么(CByte(4)<<8).GetType()返回Type{Name="Byte"FullName="System.Byte"}然而C#:((byte)4<<8).GetType()returnstype{Name="Int32"FullName="System.Int32"}有什么理由让这两个将二进制移位视为相同吗?接下来,有没有办法让C#bitshift与VB.NET(让VB.NET像C#那样做CInt(_____)<<8)?根据http://msdn.microsoft.com/en-us/library/a1sway8w.aspxbytenostaticbyteLeftShiftVBStyle(bytevalue,intcount){return(byte)(value至于为什么VB采用这种方法....只是不同的语言,不同的规则(这是C#处理int/&31和long/&63的转换方式的自然扩展,到公平地说。Chris已经确定了这一点,vb.net为Byte和Short类型定义了移位运算符,而C#没有。C#规范与C非常相似,并且非常适合OpCodes.Shl、Shr和Shr_Un的MSIL定义,它们只接受int32、int64和intptr操作数。因此,任何字节或短尺寸操作数首先通过其隐式转换转换为int32。这是vb.net编译器必须处理的一个限制,它需要生成额外的代码来使字节和短特定版本的运算符工作。字节运算符是这样实现的:DimresultAsByte=CByte(leftOperand和short运算符:DimresultAsShort=CShort(leftOperand相应的C#操作是:DimresultAsInteger=CInt(leftOperand)或者如果需要,CLng()可以隐含在C#代码中就是程序员总是要把结果转换回想要的结果类型。很多SO题对程序员来说不是很直观。VB.NET还有一个特性,就是让自动转换的生存能力更强,并且溢出检查默认是开启的,虽然这个不适用于上课时间以上就是C#学习教程的全部内容:VB.NET和C#的二进位移位区别,要用到,需要多了解C#学习教程.希望大家多多关注---本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明来源:
