Maximum size of UInt64

why this result is 0?

dim v as UInt64 = 2^64-1

Try this:

  dim v as UInt64 = CType( 2, UInt64 ) ^ CType( 64, UInt64 ) - CType( 1, UInt64 )

The types of the static values are determined by the compiler and are probably Integers (Int32 or Int64). You can be specific through CType or by assigning static values to typed constants or variables.

Maybe you should add that info into LR.

  dim a as UInt64 = 2
  dim b as UInt64 = 64
  dim v2 as UInt64 = a^b-1

 // has the same result with
 dim v as UInt64 = CType( 2, UInt64 ) ^ CType( 64, UInt64 ) - CType( 1, UInt64 )

By “you”, I think you mean, “Xojo”. If you think that’s needed you should file a feature request through Feedback.

uh…

  dim v as UInt64 = CType( 2, UInt64 ) ^ CType( 64, UInt64 ) - CType( 1, UInt64 ) = 9223372036854775808

but so does

(2^63)-1

so are you looking for (2^64)-1 or 2^(64-1)

because

2^64 (even as an interim value) exceeds Int64

and as UInt64 then (2^64)-1 is 18,446,744,073,709,551,615

meaning if I am correct, that Kems solution, while not giving a Zero value, still gives an incorrect one

Ok, done. <https://xojo.com/issue/45721>

[quote=296269:@Dave S]
so are you looking for (2^64)-1 or 2^(64-1)[/quote]
I was looking for maximum value of UInt32 UInt64, so (2^64)-1 is the correct one.

Theoretically, suppose 1 is also UInt64, then

UInt64 = (UInt64 ^ UInt64) - UInt64
              = UInt64                     - UInt64
              = UInt64

So, (UInt64 ^ UInt64) = 2^64 will exceed the maximum value.

Uh no… Max value of UINT32 is 4,294,967,295

the LangRef details all of this quite clearly

[quote=296274:@Dave S]Uh no… Max value of UINT32 is 4,294,967,295

the LangRef details all of this quite clearly[/quote]
Sorry typo. It’s UInt64

and the Max Value of UInt64 is NOT 9223372036854775808
it is (18,446,744,073,709,551,615)

As an aside, you can always use hex notation to remove all doubt. Just use a pair of “F” to represent each byte.

  dim v as UInt64 = &hFFFFFFFFFFFFFFFF

or much more simply
dim u as Uint64 = -1

the rest is left as an exercise for the reader :stuck_out_tongue: