use*_*697 5 .net c# vb.net hex
在C#中:
0x80000000==2147483648 //outputs True
Run Code Online (Sandbox Code Playgroud)
在VB.NET中:
&H80000000=2147483648 'outputs False
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
这与语言背后的历史有关.
C#始终支持无符号整数.您使用的值对于int来说太大,因此编译器会选择可以正确表示值的下一个类型.这对两者都是不利的.
在版本8(.NET 2.0)之前,VB.NET没有获得无符号整数支持.传统上,编译器被迫选择Long作为2147483648文字的类型.然而,规则对于十六进制文字是不同的,它传统上支持指定负值的位模式(参见语言规范中的第2.4.2节).所以&H80000000是Integer类型的文字,值为-2147483648,而2147483648是Long.因此不匹配.
如果您认为VB.NET是一种古怪的语言,那么我邀请您阅读这篇文章 :)
VB版应该是:
&H80000000L=2147483648
Run Code Online (Sandbox Code Playgroud)
如果没有'long'说明符('L'),VB将尝试将&H8000000解释为整数.如果你强迫它将其视为long类型,那么你将获得相同的结果.&H80000000UI也可以工作 - 实际上这是C#将文字视为的类型(UInt32).
| 归档时间: |
|
| 查看次数: |
1593 次 |
| 最近记录: |