C++,
pasted
on Mar 6:
|
#include <stdint.h>
#include <stdio.h>
const char *writell( int64_t v );
#define MEASURE(x) fprintf( stdout, "sizeof(" #x ")\t%d\n", sizeof( x ) )
#define SHOWME(x) fprintf( stdout, #x ":\ttype: %s\n", typeid( x ).name( ) )
#define SHOWME2(x) fprintf( stdout, #x ":\t\ttype: %s, value: %s\n", typeid( x ).name( ), writell( (int64_t) (x) ) )
int main( void ) {
MEASURE(short);
MEASURE(int);
MEASURE(long);
MEASURE(int64_t);
MEASURE(0);
MEASURE(0l);
SHOWME( signed short );
SHOWME( unsigned short );
SHOWME( signed int );
SHOWME( unsigned int );
SHOWME( signed long );
SHOWME( unsigned long );
SHOWME( int64_t );
SHOWME( uint64_t );
SHOWME2( 0 );
SHOWME2( 0u );
SHOWME2( 0l );
SHOWME2( 0ul );
SHOWME2( +0 );
SHOWME2( -0 );
SHOWME2( +0u );
SHOWME2( -0u );
SHOWME2( 5u );
SHOWME2( +5u );
SHOWME2( -5u );
SHOWME2( 2u+3l );
SHOWME2( 2u-3l );
SHOWME2( -2u+3l );
return 0;
}
// This is just a function for writing long longs, because C++ doesn't support them properly
const char *writell( int64_t v ) {
static char buffer[22];
if( v == 0 ) {
buffer[0] = ' ';
buffer[1] = '0';
buffer[2] = '\0';
} else {
buffer[0] = v < 0 ? '-' : '+';
if( v < 0 ) { v = -v; }
int pos = 1;
for( int64_t a = v; a > 0; a /= 10 ) { ++ pos; }
buffer[pos] = '\0';
for( ; v > 0; v /= 10 ) { buffer[--pos] = '0' + (v % 10); }
}
return buffer;
}
|
Output:
|
sizeof(short) 2
sizeof(int) 4
sizeof(long) 4
sizeof(int64_t) 8
sizeof(0) 4
sizeof(0l) 4
signed short: type: s
unsigned short: type: t
signed int: type: i
unsigned int: type: j
signed long: type: l
unsigned long: type: m
int64_t: type: x
uint64_t: type: y
0: type: i, value: 0
0u: type: j, value: 0
0l: type: l, value: 0
0ul: type: m, value: 0
+0: type: i, value: 0
-0: type: i, value: 0
+0u: type: j, value: 0
-0u: type: j, value: 0
5u: type: j, value: +5
+5u: type: j, value: +5
-5u: type: j, value: +4294967291
2u+3l: type: m, value: +5
2u-3l: type: m, value: +4294967295
-2u+3l: type: m, value: +1
|
|