Per numeri interi con complemento a 2 di 32 bit, intmin
è 0x80000000
o, in effetti, -2147483648
. Tuttavia, intmax
è 0x7FFFFFFF
, che è solo 2147483647
. Ciò significa che la negazione di intmin
sarebbe 2147483648
, che non può essere rappresentata negli interi con segno a 32 bit.
MATLAB effettivamente fa qualcosa di strano. Secondo le normali regole del complemento a 2, 0 - 0x80000000
dovrebbe restituire 0x80000000
. Tuttavia, secondo MATLAB, 0 - 0x80000000 = 0x7FFFFFFF
. Questo dovrebbe spiegare perché il abs(intmin) = intmax
è valido per MATLAB (ma non necessariamente in altre lingue).
Questa stranezza ha un effetto collaterale interessante, tuttavia: si può supporre che abs
non restituisca mai un numero negativo.
fonte
2013-06-30 20:03:04
Controllare [complemento a due] (http://en.wikipedia.org/wiki/Two's_complement) e gamme per i numeri a 32 bit. – plesiv