Is there a macro which converts a 32 bit signed integer to 64 bit unsigned integer ?

Hello All,

Is there a macro which converts a 32 bit signed integer to 64 bit unsigned integer

Thanks in Advance,
CPPUser7


Answer this question

Is there a macro which converts a 32 bit signed integer to 64 bit unsigned integer ?

  • MaciekWojcik

    I just compiled that with VC 2003 and didn't get any warning. Try compiling a minimal cpp that will reproduce the warning, and copy/paste the full listing here so the rest of us can try it out too.

  • Anarchy

    Sorry for the late response. All your answers are correct, you don't get any warning while converting a 32 bit signed to 64 bit unsigned. My problem was with some other part of the code throwing warnings.

    Thanks a lot for you responses

  • TedSA

    Is it the same definition as the one I've shown Can you give a complete repro (in as few lines as possible) that includes the #included files Also, which version of Visual C++ are you using
  • Thomas Werner

    To get to the bottom of this, it would help to be be compiling the same code with the same version of Visual Studio.

    Try this (I have VS 2005):

    #include <windows.h>

    int main()
    {
    long i1 = -1;
    ULONGLONG i2 = i1;
    printf(
    "%I64x\n",i2);
    }


  • calmal20

    Go to definition takes me to 3 different symbols to resolve ambiguity

    1. C:\program files\microsoft visual studio.net\VC7\platformsdk\include\oledb.h
    Here ULONGLONG is defined as
    typedef MIDL_uhyper ULONGLONG;

    and in rpcndr.h MIDL_uhyper is defined as
    #define MIDL_uhyper unsigned __int64

    2. C:\program files\microsoft visual studio.net\VC7\platformsdk\include\winnt.h
    typedef unsigned __int64 ULONGLONG;

    3. C:\program files\microsoft visual studio.net\VC7\platformsdk\include\wtypes.h
    typedef unsigned __int64 ULONGLONG;

    I am running Microsoft Visual C++ .NET on Microsoft Development Environment 2002 Version 7.0.9955 and
    Microsoft .NET Framework 1.0 version 1.0.3705

    Please let me know if you needed more information. Thanks for your time.


  • Chrisull

    Same idea, compiles and executes fine at /W4:
    long i1 = -1;
    ULONGLONG i2 = i1;
    Why do you need a macro



  • lee_70

    ULONGLONG should be a typedef:

    typedef unsigned __int64 ULONGLONG;

    Try using "right click: Go to definition" on ULONGLONG to see if it is any different.


  • paso

    Coming to my problem. I have a function which currently returns a long and I have to change this function to return unsigned 64 bit integer so I have chosen ULONGLONG.



  • Big5824

    OK, with what we know sofar, I tried this:
    long func() {
    return -1;
    }

    int _tmain(int argc, _TCHAR* argv[])
    {
    ULONGLONG i = 0;
    i += func();
    }

    Still no warning. It would, like, really, really help if we could see your code. I mean, really...



  • skuehner

    Hello nobugz,

    Thanks for your response. But I am looking for some Win API macro if exists which does this job. My requirement is to convert a long to ULONGLONG.

    Any pointers will be appreciated.



  • sowjanya

    It doesn't matter that it's defined in 3 header files (all of which are probably included directly or indirectly) as all three define it the same way. So I don't see how you get a warning.

  • &amp;#24859;&amp;#38738;&amp;#34521;

    The problem with this direct assignment is,

    I am getting the following warning upon building
    "warning C4244: '+=' : conversion from 'long' to 'ULONGLONG', possible loss of data"
    I wanted a solution without any warnings.

    I thought, I could zero off the High bit(which holds the sign) in the 32 bit signed integer and get an unsigned 32 bit and then assign this to 64 bit unsigned integer. Something like this

    long l = 3;
    ULONG ul = l & 0x7FFFFFFF;
    ULONGLONG ull = ul;

    But still I am not convinced as this works on application running on 32 bit system(which I am currently working on) but not sure if the same code will work for application running on 64 bit system. So, looking if Win API provides any such macro to do the job.


  • renealejandrov

    This code compiled and executed without problems at /W4:
    int i1 = -1;
    unsigned __int64 i2 = i1;
    System::Int32 i3 = -1;
    System::Int64 i4 = i3;



  • Jon Braganza

    You are correct Brian, ULONGLONG is a typedef. can you please throw some light on this issue.

  • Is there a macro which converts a 32 bit signed integer to 64 bit unsigned integer ?