[VB.NET] VB2005でUInt32の型に&hFFFFFFFF
- 題名: [VB.NET] VB2005でUInt32の型に&hFFFFFFFF
- 著者: どらごら
- 日時: 2006/03/28 19:46:22
- ID: 15081
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: [VB.NET] VB2005でUInt32の型に&hFFFFFFFF
- 著者: 魔界の仮面弁士
- 日時: 2006/03/28 20:41:30
- ID: 15084
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: [VB.NET] VB2005でUInt32の型に&hFFFFFFFF
- 著者: どらごら
- 日時: 2006/03/29 9:41:54
- ID: 15086
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
こんにちは、どらごらです。
VB2005のExpressを使ってます。
バグっぽいのを見つけたのですが、どの部分の仕様(?)バグ?なのか確認したいので、
VB.NET2003やVS2005のC#でも発生するのか、確認していただけないでしょうか?
Frameworkの仕様なのか、VB.NETの言語仕様なのかはっきりさせたいためです。
内容は以下のとおりです。
[代入エラーが発生するパターン]
Dim hoge1 As UInt32 = &HFFFFFFFF
→定数式は、型'UInteger'では表現できません。
※4バイトはOKのハズ
Dim hoge2 As UInteger = &HFFFFFFFF
→hoge1と一緒
Dim hoge3 As UInt64 = &HFFFFFFFFFFFFFFFF
→定数式は、型'ULong'では表現できません。
※8バイトはOKのハズ
Dim hoge4 As UInt64 = 18446744073709551615
→オーバーフローしました
※0xFFFFFFFFFFFFFFFF(8Byte) = 18446744073709551615
Dim hoge10 As UInt16 = -1
Dim hoge11 As UInt32 = -1
Dim hoge12 As UInt64 = -1
→定数式は、型'Uxxx'では表現できません。
[代入が成功するパターン]
Dim hoge5 As UInt16 = &HFFFF
Dim hoge6 As UInt32 = &H7FFFFFFF
Dim hoge7 As UInteger = &H7FFFFFFF
Dim hoge8 As UInt32 = 4294967295
Dim hoge9 As UInt64 = &H7FFFFFFFFFFFFFFF
[バグだと思う理由]
・UInt16型には符号ビット(16bit)を含めた、代入ができる
・UInt32型に10進(294967295)が代入できるのに、符号ビット含めた16進(0xFFFFFFFF)だと代入できない
・UInt64型には10進(18446744073709551615)も、符号ビット含めた16進(0xFFFFFFFFFFFFFFFF)も代入できない
・UInt64型にはMAX値を入れる方法がない
P.S.
64ビットCPUなら可能なのかな?