Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

più O meno? più E meno! :-)

I campi MaxValue e MinValue forniti dal tipo System.Int32 sono due costanti, definite rispettivamente 0x7fffffff (0 seguito da 31 1) e 0x80000000 (1 seguito da 31 0), cioè l'uno è il complemento binario dell'altro.

public struct Int32 //...
{
public const int MaxValue = 0x7fffffff;
public const int MinValue = unchecked((int)0x80000000);
//...
}

L'operatore unchecked si deve al fatto che la costante hexadecimale 0x80000000 è del tipo uint (Pow(2, 31)) e il cast ad un int produce overflow (Pow(2, 31) > MaxValue). Questi valori spiegano l'osservazione di M.rkino che Int32.MinValue = -Int32.MinValue.
Vediamo qui di seguito come:
Abbiamo:
MinValue = -Pow(2, 31)
MaxValue = Pow(2, 31) - 1
MaxValue + 1 = MinValue

Possiamo quindi scrivere:
MinValue = -Pow(2, 31) = -Pow(2, 31) + 1 - 1 = -(Pow(2, 31) - 1) - 1 = -MaxValue - 1 = -(MaxValue + 1) = -MinValue
Cioè MinValue = -MinValue.

Print | posted on martedì 1 giugno 2004 03:08 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET