Задать вопрос
evgeniy8705
@evgeniy8705
Повелитель вселенной

Как положительные числа преобразуются в отрицательные?

Статья
Здесь описано преобразование чисел из положительных в отрицательные. Но либо что то не сходится, либо я что то не так понимаю, что более вероятнее.
Например число 2:
Двоичное представление: 00000000000000000000000000000010
По алгоритму обращаем биты, получаем: 11111111111111111111111111111101
Далее прибавляем 1, получаем: 11111111111111111111111111111110 (Это и есть -2?!), в десятичной форме получается: 4294967294, откуда -2 тогда получить?

Объясните пожалуйста, вообще понять не могу.
  • Вопрос задан
  • 322 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
usdglander
@usdglander
Yipee-ki-yay
Читаем про знаковые и безнаковые типы переменных. Внимательно читаем!
Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
+/- нет в памяти. Есть только 0/1. Запись отрицательных чисел, как вы показали, называется дополнительный код. Он удобен при счете, так как практически не отличается от счета беззнаковых чисел.
Например (8 бит):
-
  00000010 (2)
- 00000100 (4)
  --------
  11111110 (-2)

  11111111 (-1)
+ 00000011 (3)
  --------
 100000010 (2) - здесь старший бит отбрасывается, так как у нас не больше 8 бит


Вы правы, если рассматривать 11111111111111111111111111111110 как беззнаковое число, это 4294967294. Но это знаковое число! Старший (первый) бит показывает 1, значит, это отрицательное число.
1. Инвертируем биты: 00000000000000000000000000000001
2. Прибавляем 1: 00000000000000000000000000000010
3. Переводим в десятичную систему: 2.
4. Добавляем -: -2.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы