Đối với các số nguyên được bổ sung có số lượng là 32 bit, intmin
là 0x80000000
hoặc thực sự là -2147483648
. Tuy nhiên, intmax
là 0x7FFFFFFF
, chỉ là 2147483647
. Điều này có nghĩa là phủ định của intmin
sẽ là 2147483648
, không thể được biểu thị bằng số nguyên được ký 32 bit.
MATLAB thực sự làm điều gì đó kỳ quặc. Theo các quy tắc thông thường của phần bổ sung 2, 0 - 0x80000000
sẽ cung cấp lại cho 0x80000000
. Tuy nhiên, theo MATLAB, 0 - 0x80000000 = 0x7FFFFFFF
. Điều này sẽ giải thích lý do tại sao abs(intmin) = intmax
giữ cho MATLAB (nhưng không nhất thiết phải bằng các ngôn ngữ khác).
Sự kỳ quặc này có tác dụng phụ thú vị, tuy nhiên: bạn có thể giả định rằng abs
không bao giờ trả về số âm.
Nguồn
2013-06-30 20:03:04
Kiểm tra [Hai của bổ sung] (http://en.wikipedia.org/wiki/Two's_complement) và dao động cho số 32-bit. – plesiv