Например, (число) -92 имеет двоичную форму: 10100100 (в 8-битном байтовом представлении).Но если нам дано 10100100, можем ли мы сказать, что это -92, а не другое неотрицательное число?
Нет, вам нужно будет заранее знать, является ли подписанное или неподписанное представление/ соглашение было использовано, и даже если вы знаете, что оно подписано, то вам также необходимо знать кодировку , используемую для хранения числа.
Если 8-разрядное целое число (т. е. байт)), то в соответствии с Томом и 32bitkid целые числа со знаком обычно хранятся в дополнении 2 , где Наиболее значимый бит (MSB) будет определять, является ли число отрицательным или нет.
Например, в вашем примере байт 10100100
может представлять либо байт со знаком -92
, поскольку:
MSB : 1 means negative
Other 7 Bits 0100100
Flip and add 1 => 1011011 + 1 = 1011100
From powers of two, right to left :
0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 0*2^5 + 1*2^6
= 4 + 8 + 16 + 64
= 92 (and thus -92 because of the MSB)
ИЛИ, если значение является байт без знака , тогда MSB просто обрабатывается как следующая степень 2, то же самое, что и все младшие биты
, т.е. 10100100
может представлять:
4 + 32 + 128
= 164
(опять же, полномочия двух, справа налево и пропуск 0
степеней двух)
Решение о том, должно ли быть целое число подписано или нет, и количество требуемых битов, как правило, определяется диапазоном значений, которые необходимо сохранить в нем.Например, 32-разрядное целое число со знаком может представлять диапазон:
–2147483648 to 2147483647
В то время как 32-разрядное целое число без знака может представлять числа от
0 to 4294967295