<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    <br>
    <div class="moz-cite-prefix">On 5/27/2021 8:41 AM, Benoît Minisini
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:%3C02336b9d-26a8-a01b-5bb9-92811251d416@gmail.com%3E">Le
      27/05/2021 à 15:58, John Anderson a écrit :
      <br>
      <blockquote type="cite">On 5/26/2021 11:39 PM, CD wrote:
        <br>
        <blockquote type="cite">Hello,
          <br>
          <br>
          why Val("&FFFF") = -1
          <br>
          and
          <br>
          why Val("&FFFFFFFF") = -1
          <br>
          <br>
          is it normal?
          <br>
          <br>
          attached a TestVal project
          <br>
          Regards
          <br>
          <br>
          <br>
          <br>
        </blockquote>
        <br>
        <APOLOGIES - CORRECTIONS ADDED>
        <br>
        <br>
        Yes, that is correct: Val() returns a numeric value evaluated as
        the -shortest-  integer type.  You have specified Short (2
        bytes) in first case, and a Long Integer (4 bytes) in the second
        case.  In both cases the highest order bit of the variable is 1,
        hence both cases evaluate to a value -1.
        <br>
        <br>
        You can also do Val("&0000FFFF")  = 65535 ' The string
        dictates a Long Integer
        <br>
        <br>
        Or Val("&0FFFF")  = 65535  ' This string is considered a
        Long Integer also
        <br>
        <br>
        Or Val("&HFFFF")  = -1  ' This string as a more formal
        designation for Hex (Like VB)
        <br>
        <br>
        Or Val("&x1111111111111111")  = -1   ' Binary string tells
        Gambas this is a 2-Byte Short (similar to VB behaviour)
        <br>
        <br>
        Or Val("&x11111111")  = 255   ' Binary string tells Gambas
        this is a Byte (Like VB) - unsigned value - I haven't tested
        this extensively, could also be considering this as Short
        <br>
        <br>
        The documentation here is incorrect I think - it has left out
        the part about "Short" (and maybe Byte) type evaluations being
        returned if possible - I think that's where the confusion
        started:
        <br>
        <br>
        <a class="moz-txt-link-freetext" href="https://gambaswiki.org/wiki/lang/val">https://gambaswiki.org/wiki/lang/val</a>
        <br>
        <br>
        -John
        <br>
        <br>
        <br>
        <br>
        ----[ <a class="moz-txt-link-freetext" href="http://gambaswiki.org/wiki/doc/netiquette">http://gambaswiki.org/wiki/doc/netiquette</a> ]----
        <br>
        <br>
      </blockquote>
      <br>
      I don't see where the documentation of Val() is incorrect, it does
      not talk about the difference between "&HFFFF" and
      "&HFFFF&", which is a VB horror introduced in Gambas to
      help old VB users.
      <br>
      <br>
      The rule is the following:
      <br>
      <br>
      If the number starts with "&" or "&H" (hexdecimal),
      "&X" or "%" (binary), and if the number -does not- ends with
      "&" or "U", then there is an automatic sign extension.
      <br>
      <br>
      This automatic sign extension is done only if the number of digits
      equals a multiple of 16-bits integer (i.e. 4 or 8 digits in
      hexadecimal, 16 or 32 digits in binary).
      <br>
      <br>
      So be careful with that horror!
      <br>
      <br>
    </blockquote>
    Horror indeed.  Yes!<br>
    <br>
    To be clear: It also seems to work with Octals with "&o" and
    "&O" "O" being letter O as in <b>O</b>ctal - not Zero.<br>
    <br>
    Val("&O377") = Val ("&o377") = 255 - at least that's what
    I'm seeing here.  Seems to work OK at this end.<br>
    <br>
    VB6 was famous for stripping off the final "&" if it thought it
    wasn't needed when setting literal string.  Oh well.<br>
    <br>
    -John<br>
    <br>
    <br>
    <br>
    <br>
    <br>
  </body>
</html>