2009-07-17

Konwersje typów prostych ze znakiem na typy bez znaku

Przykładowy kod:
{
    short x1 = 4;
    short x2 = -4;

    ushort x3 = (ushort)x1;
    ushort x4 = (ushort)x2;

    uint x5 = (uint)x1;
    uint x6 = (uint)x2;

    uint x7 = (uint)(ushort)x1;
    uint x8 = (uint)(ushort)x2;

    Debug.WriteLine(x3);
    Debug.WriteLine(x4);
    Debug.WriteLine(x5);
    Debug.WriteLine(x6);
    Debug.WriteLine(x7);
    Debug.WriteLine(x8);

}

{
    int x1 = 4;
    int x2 = -4;

    uint x3 = (uint)x1;
    uint x4 = (uint)x2;

    ulong x5 = (ulong)x1;
    ulong x6 = (ulong)x2;

    ulong x7 = (ulong)(ushort)x1;
    ulong x8 = (ulong)(ushort)x2;

    ulong x9 = (ulong)(uint)x1;
    ulong x10 = (ulong)(uint)x2;

    Debug.WriteLine(x3);
    Debug.WriteLine(x4);
    Debug.WriteLine(x5);
    Debug.WriteLine(x6);
    Debug.WriteLine(x7);
    Debug.WriteLine(x8);
    Debug.WriteLine(x9);
    Debug.WriteLine(x10);
}
Wynik: 4 65532 4 4294967292 4 65532 4 4294967292 4 18446744073709551612 4 65532 4 4294967292 W skrócie po analizie możemy powiedzieć, że dla typów ze znakiem podczas ich konwersji na typ bez znaku o większym zakresie, jeśli liczba jest ujemna, nowe najstarsze bity uzupełniane są jedynkami. Jeśli liczba jest ujemna uzupełnienie następuje zerami.

Brak komentarzy:

Prześlij komentarz