Hemant
Hemant

Reputation: 19826

Why does the int and uint comparison fails in one case but not in another?

Consider following program:

static void Main (string[] args) {
    int i;
    uint ui;

    i = -1;
    Console.WriteLine (i == 0xFFFFFFFF ? "Matches" : "Doesn't match");

    i = -1;
    ui = (uint)i;
    Console.WriteLine (ui == 0xFFFFFFFF ? "Matches" : "Doesn't match");

    Console.ReadLine ();
}

The output of above program is:

Doesn't match
Matches

Why the first comparison fails when unchecked conversion of integer -1 to unsigned integer is 0xFFFFFFFF? (While the second one passes)

Upvotes: 5

Views: 2269

Answers (2)

tanascius
tanascius

Reputation: 53944

Your first comparison will be based on longs ... since 0xFFFFFFFF is not an int value :)
Try to write

Console.WriteLine( (long)i == 0xFFFFFFFF ? "Matches" : "Doesn't match" );

and you will get a cast is redundant message

Upvotes: 6

Tronic
Tronic

Reputation: 10430

In the second case you cast -1 into uint, getting 0xFFFFFFFF, so it matches as expected. In the first case apparently the comparison is done in a format with suitable range for both values, allowing for the mathematically correct result that they do not match.

Upvotes: 2

Related Questions