N
Nephi Immortal
I would like to ask a question about integer literal.
Let's see my example below. I wonder if the suffix i(n) is the standard C++ Compiler and is compatible to portable ANSI or is it Microsoft extension?
If the integer in the range 0 through 65535, then int type is chosen on 32 bit machine or long long type on 64 bit machine.
void Do( char x ) {}
void Do( signed char x ) {} // never used unless you declare (signed char) name
void Do( unsigned char x ) {}
void Do( wchar_t x ) {}
void Do( signed short x ) {}
void Do( unsigned short x ) {}
void Do( signed int x ) {}
void Do( unsigned int x ) {}
void Do( signed long x ) {}
void Do( unsigned long x ) {}
void Do( signed long long x ) {}
void Do( unsigned long long x ) {}
int main()
{
Do( 'a' ); // call Do( char x )
Do( L'a' ); // call Do( wchar_t x )
Do( 0x7F ); // call Do( signed int x )
Do( 0x7FFF ); // call Do( signed int x )
Do( 0x7FFFFFFF ); // call Do( signed int x )
Do( 0x80000000 ); // call Do( unsigned int x ) on 32-bit machine
Do( 0x80000000 ); // call Do( signed long long x ) on 64-bit machine
Do( 0x7FFFFFFFFFFFFFFF ); // call Do( signed long long x )
Do( 0x80i8 ); // call Do( char x )
Do( 0x8000i16 ); // call Do( signed short x )
Do( 0x80000000i32 ); // call Do( signed int x )
Do( 0x8000000000000000i64 ); // call Do( signed long long x )
Do( 0x80ui8 ); // call Do( unsigned char x )
Do( 0x8000ui16 ); // call Do( unsigned short x )
Do( 0x80000000ui32 ); // call Do( unsigned int x )
Do( 0x8000000000000000ui64 ); // call Do( unsigned long long x )
Do( 0x7Fl ); // call Do( signed long x )
Do( 0x7FFFl ); // call Do( signed long x )
Do( 0x7FFFFFFFl ); // call Do( signed long x )
Do( 0x7Fll ); // call Do( signed long long x )
Do( 0x7FFFll ); // call Do( signed long long x )
Do( 0x7FFFFFFFll ); // call Do( signed long long x )
return 0;
}
Let's see my example below. I wonder if the suffix i(n) is the standard C++ Compiler and is compatible to portable ANSI or is it Microsoft extension?
If the integer in the range 0 through 65535, then int type is chosen on 32 bit machine or long long type on 64 bit machine.
void Do( char x ) {}
void Do( signed char x ) {} // never used unless you declare (signed char) name
void Do( unsigned char x ) {}
void Do( wchar_t x ) {}
void Do( signed short x ) {}
void Do( unsigned short x ) {}
void Do( signed int x ) {}
void Do( unsigned int x ) {}
void Do( signed long x ) {}
void Do( unsigned long x ) {}
void Do( signed long long x ) {}
void Do( unsigned long long x ) {}
int main()
{
Do( 'a' ); // call Do( char x )
Do( L'a' ); // call Do( wchar_t x )
Do( 0x7F ); // call Do( signed int x )
Do( 0x7FFF ); // call Do( signed int x )
Do( 0x7FFFFFFF ); // call Do( signed int x )
Do( 0x80000000 ); // call Do( unsigned int x ) on 32-bit machine
Do( 0x80000000 ); // call Do( signed long long x ) on 64-bit machine
Do( 0x7FFFFFFFFFFFFFFF ); // call Do( signed long long x )
Do( 0x80i8 ); // call Do( char x )
Do( 0x8000i16 ); // call Do( signed short x )
Do( 0x80000000i32 ); // call Do( signed int x )
Do( 0x8000000000000000i64 ); // call Do( signed long long x )
Do( 0x80ui8 ); // call Do( unsigned char x )
Do( 0x8000ui16 ); // call Do( unsigned short x )
Do( 0x80000000ui32 ); // call Do( unsigned int x )
Do( 0x8000000000000000ui64 ); // call Do( unsigned long long x )
Do( 0x7Fl ); // call Do( signed long x )
Do( 0x7FFFl ); // call Do( signed long x )
Do( 0x7FFFFFFFl ); // call Do( signed long x )
Do( 0x7Fll ); // call Do( signed long long x )
Do( 0x7FFFll ); // call Do( signed long long x )
Do( 0x7FFFFFFFll ); // call Do( signed long long x )
return 0;
}