Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > C - C++ Learning > Lesson 4, Integ...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 4108 of 4218
Post > Topic >>

Lesson 4, Integer Assignments, Unsigned to Signed with Mixed Sizes (4 spectacular range detection failures)

by "TheDevil" <TheDevil@[EMAIL PROTECTED] > Apr 12, 2008 at 10:04 PM

Hello,

See comments for details.

// *** Begin of Main.CPP

#include <stdio.h>

typedef char int8;
typedef short int int16;
typedef int int32;
typedef long long int64;

typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned int uint32;
typedef unsigned long long uint64;

/*

13 april 2008

Back to School:

Lesson 4, Integer Assignments, Unsigned to Signed with Mixed Sizes.

Conclusions:

BAD: 2 spectacular range detection failures for int32.
BAD: 2 spectacular range detection failures for int64.
BAD: 1 range detection failure for int8.
BAD: 1 range detection failure for int16.

Platform tested intel architecture 32.

40 out of 48 tests passed.
2 out of 48 tests doubtfull, but passed.
6 out of 48 tests failed.

Score:

8.75 out of 10

*/

int main()
{
    printf("Program Started \n\n");

    int8 vMinInt8;
    int8 vMaxInt8;

    uint8 vMinUint8;
    uint8 vMaxUint8;

    int16 vMinInt16;
    int16 vMaxInt16;

    uint16 vMinUint16;
    uint16 vMaxUint16;

    int32 vMinInt32;
    int32 vMaxInt32;

    uint32 vMinUint32;
    uint32 vMaxUint32;

    int64 vMinInt64;
    int64 vMaxInt64;

    uint64 vMinUint64;
    uint64 vMaxUint64;

    int8 vInt8;
    uint8 vUint8;

    int16 vInt16;
    uint16 vUint16;

    int32 vInt32;
    uint32 vUint32;

    int64 vInt64;
    uint64 vUint64;

    // setup min and max for int8
    vMinInt8 = -128;
    vMaxInt8 = 127;

    // setup min and max for uint8
    vMinUint8 = 0;
    vMaxUint8 = 255;

    // setup min and max for int16
    vMinInt16 = -32768;
    vMaxInt16 = 32767;

    // setup min and max for uint16
    vMinUint16 = 0;
    vMaxUint16 = 65535;

    // setup min and max for int32
    vMinInt32 = 2147483648; // same as -2147483648, solves warning, <- 
weakness in language.
    vMaxInt32 = 2147483647;

    // setup min and max for uint32
    vMinUint32 = 0;
    vMaxUint32 = 4294967295;

    // setup min and max for int64
    vMinInt64 = 9223372036854775808; // same as -9223372036854775808,
solves 
warning, <- weakness in language
    vMaxInt64 = 9223372036854775807; // 9223372036854775808 would give no 
warning ?!?!, BAD

    // test min and max for uint64
    vMinUint64 = 0;
    vMaxUint64 = 18446744073709551615;

    // signed 8 bit = unsigned variable bit

    // TEST1
//    vInt8 = vMinUint8;  // no warning, OK
//                        // result: 0, OK

    // TEST2
//    vInt8 = 200; // warning: truncation of constant value, OK

    // TEST3
//    vInt8 = vMaxUint8;  // no warning, BAD
                        // result: -1, OK

    // TEST4
//    vInt8 = vMinUint16;  // warning: conversion from 'uint16' to 'int8',

possible loss of data, OK
                        // result: 0, OK

    // TEST5
//    vInt8 = 50000; // warning: truncation from 'int' to 'int8', OK
                  // warning: truncation of constant value, OK

    // TEST6
//    vInt8 = vMaxUint16; // warning:  conversion from 'uint16' to 'int8',

possible loss of data, OK
                        // result: -1, OK

    // TEST 7
//    vInt8 = vMinUint32; // warning: conversion from 'uint32' to 'int8', 
possible loss of data, OK
                        // result: 0, OK

    // TEST 8
//    vInt8 = 3000000000;  // warning: truncation from 'unsigned long' to 
'int8', OK, INTERESTING
                        // warning: truncation of constant value, OK

    // TEST 9
//    vInt8 = vMaxUint32; // warning: conversion from 'uint32' to 'int8', 
possible loss of data, OK
                        // result: -1, OK

    // TEST 10
//    vInt8 = vMinUint64; // warning: conversion from 'uint64' to 'int8', 
possible loss of data, OK
                        // result: 0, OK

    // TEST 11
//    vInt8 = 12345678901234567890; // warning: truncation from 'unsigned 
__int64' to 'int8', OK, INTERESTING
                                  // warning: truncation of constant
value, 
OK

    // TEST 12
//    vInt8 = vMaxUint64; // warning: conversion from 'uint64' to 'int8', 
possible loss of data, OK
                        // result: -1, OK

//    printf("vInt8: %d \n", vInt8 );

    // signed 16 bit = unsigned variable bit

    // TEST 13
//    vInt16 = vMinUint8; // no warning, OK
                        // result: 0, OK

    // TEST 14
//    vInt16 = 200;       // no warning, OK

    // TEST 15
//    vInt16 = vMaxUint8; // no warning, OK
                        // result: 255, OK

    // TEST 16
//    vInt16 = vMinUint16; // no warning, OK
                        // result: 0, OK

    // TEST 17
//    vInt16 = 50000;     // warning: truncation of constant value

    // TEST 18
//    vInt16 = vMaxUint16; // no warning, BAD
                         // result: -1, OK

    // TEST 19
//    vInt16 = vMinUint32; // warning: conversion from 'uint32' to
'int16', 
possible loss of data, OK
                         // result: 0, OK

    // TEST 20
//    vInt16 = 3000000000; // warning: truncation from 'unsigned long' to 
'int16', OK
                         // warning: truncation of constant value, OK

    // TEST 21
//    vInt16 = vMaxUint32; // warning: conversion from 'uint32' to
'int16', 
possible loss of data, OK
                         // result: -1, OK

    // TEST 22
//    vInt16 = vMinUint64; // warning: conversion from 'uint64' to
'int16', 
possible loss of data, OK
                         // result: 0, OK

    // TEST 23
//    vInt16 = 12345678901234567890; // warning: truncation from 'unsigned

__int64' to 'int16', OK
                                   // warning: truncation of constant
value

    // TEST 24
//    vInt16 = vMaxUint64; // warning: conversion from 'uint64' to
'int16', 
possible loss of data, OK
                         // result: -1, OK

//    printf("vInt16: %d \n", vInt16 );

    // signed 32 bit = unsigned variable bit

    // TEST 25
//    vInt32 = vMinUint8; // no warning: OK
                        // result: 0, OK

    // TEST 26
//    vInt32 = 200; // no warning, OK

    // TEST 27
//    vInt32 = vMaxUint8; // no warning, OK
                        // result: 255, OK

    // TEST 28
//    vInt32 = vMinUint16; // no warning, OK
                         // result: 0, OK

    // TEST 29
//    vInt32 = 50000;     // no warning, OK

    // TEST 30
//    vInt32 = vMaxUint16; // no warning, OK
                         // result: 65535, OK

    // TEST 31
//    vInt32 = vMinUint32; // no warning, DOUBTFULLL, BUT OK.

    // TEST 32
//    vInt32 = 3000000000; // no warning, VERY BAD, SPECTACULAR FAILURE
                         // result: -1294967296, OK

    // TEST 33
//    vInt32 = vMaxUint32; // no warning, VERY BAD, SPECTACULAR FAILURE
                         // result: -1, OK

    // TEST 34
//    vInt32 = vMinUint64; // warning: conversion from 'uint64' to
'int32', 
possible loss of data, OK
                         // result: 0, OK

    // TEST 35
//    vInt32 = 12345678901234567890; // warning: truncation from 'unsigned

__int64' to 'int32', OK
                                   // warning: truncation of constant
value, 
OK

    // TEST 36
//    vInt32 = vMaxUint64; // warning: conversion from 'uint64' to
'int32', 
possible loss of data, OK
                         // result: -1, OK

//    printf("vInt32: %d \n", vInt32 );

    // signed 64 bit = unsigned variable bit

    // TEST 37
//    vInt64 = vMinUint8; // no warning, OK
                        // result: 0, OK

    // TEST 38
//    vInt64 = 200; // no warning, OK

    // TEST 39
//    vInt64 = vMaxUint8; // no warning, OK
                        // result: 255, OK

    // TEST 40
//    vInt64 = vMinUint16; // no warning, OK
                         // result: 0, OK

    // TEST 41
//    vInt64 = 50000; // no warning, OK

    // TEST 42
//    vInt64 = vMaxUint16; // no warning, OK
                         // result: 65535, OK

    // TEST 43
//    vInt64 = vMinUint32; // no warning, OK
                         // result: 0, OK

    // TEST 44
//    vInt64 = 3000000000; // no warning, OK
                         // result: 3000000000, OK, SLIGHTY INTERESTING

    // TEST 45
//    vInt64 = vMaxUint32; // no warning, OK
                         // result: 4294967295, OK

    // TEST 46
//    vInt64 = vMinUint64; // no warning, DOUBTFULL, BUT OK
                         // result: 0, OK

    // TEST 47
//    vInt64 = 12345678901234567890; // no warning, VERY BAD, SPECTACULAR 
FAILURE
                                   // result: -6101065172474983726, OK

    // TEST 48
    vInt64 = vMaxUint64; // no warning, VERY BAD, SPECTACULAR FAILURE
                         // result: -1, OK

    printf("vInt64: %lld \n", vInt64 );

    printf("Program finished \n");
}

// *** End of Main.cpp ***

Bye,
  The Devil.
 




 1 Posts in Topic:
Lesson 4, Integer Assignments, Unsigned to Signed with Mixed Siz
"TheDevil" <  2008-04-12 22:04:15 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Jul 26 0:07:08 CDT 2008.