2

VisualBasicの場合

Friend Const xxx As UInt64 = 400 * 365 * 24 * 60 * 60 ''// Number of secs in 400 years

これはエラーで失敗します

constant expression not representable in type integer

問題は400*365 * 24 * 60*60が2^32より大きいことです

定数をUInt64と宣言することで、64ビット値を割り当てても問題ないと思いました。

4

2 に答える 2

7

毎年365日よりわずかに多い(97うるう日を追加する必要がある)という事実を除けば、定数を構成するために乗算される各値は整数リテラルであるため、UInt64に割り当てるまではすべて整数空間で行われます。これを試して:

Friend Const xxx As UInt64 = 400UL * 365UL * 24UL * 60UL * 60UL
于 2009-01-27T21:22:30.483 に答える
1

定数の最後にハッシュを置き、それを「double」として宣言します。

私はビットマスクフィールドでこれを行いました:

Public Const EDIT_TRANSACTION              As Double = 1073741824
Public Const EDIT_DWRDELIVERY              As Double = 2147483648#
Public Const ENTER_DWRORDER                As Double = 4294967296#
Public Const DELETE_DWRORDER               As Double = 8589934592#
Public Const DELETE_TRANSACTION            As Double = 17179869184#
Public Const DELETE_WATERORDER             As Double = 34359738368#
Public Const ENTER_METERREADING            As Double = 68719476736#

** 編集 **

これは私がVB6用に書いた古いコードであり、あなたが求めていたものとは正確に一致しなかったため、私はこれにマークダウンしたと思います。したがって、これを読んでいる人がVB6を使用していて、ビットマスクフィールドをSQLのようなものに渡さなければならない場合、これは私にとって完璧に機能したものです。

それ以外の場合は、私の答えに投票し続けてください。:)

于 2009-01-27T21:24:22.040 に答える