КИТА unofficial
Ноябрь 22, 2024, 04:16:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Инверсия в С/С++  (Прочитано 46933 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Archangel
Профессор
****

Карма: +17/-2
Offline Offline

Пол: Мужской
Сообщений: 999



« Ответ #20 : Март 24, 2008, 08:03:08 »

Элементарно поменять знаковый бит с 0 на 1.
0 1001 =9
1 0110 =-10
Записан

Птицей Гермеса меня называют. Крылья свои пожирая, сам я себя укрощаю.
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #21 : Март 24, 2008, 08:14:05 »

1 0110 =-10

1 0110   =   1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 16 + 4 +2 = 22

Archangel, не знаю как у Вас получилось, что  1 0110 = -10 ?
Записан
Archangel
Профессор
****

Карма: +17/-2
Offline Offline

Пол: Мужской
Сообщений: 999



« Ответ #22 : Март 24, 2008, 08:18:41 »

Ну я тебе условно показал, отделенные пробелом - знаковые разряды. Ты все время пытаешься перевести числа как положительные. А если старший(знаковый) разряд 1, то число воспринимается как отрицательное. То есть старший разряд показывает будет перед числом минус или нет. Для знакового типа.
PS Прочитай еще раз пост Storm'a на прошлой странице, там же написано, что знаковый разряд обрабатывается отдельно.
Записан

Птицей Гермеса меня называют. Крылья свои пожирая, сам я себя укрощаю.
EvilMax
Администратор
Завкаф
*****

Карма: +59/-0
Offline Offline

Пол: Мужской
Сообщений: 1072


Злой и страшный :)


« Ответ #23 : Март 24, 2008, 09:08:16 »

Пусть signed char x=9;  (чтобы 1 байт был и меньше писать Подмигивающий )

x=00001001(2)

~x=11110110(2)

А вот теперь переводим в 10-ную, не забывая, что компьютер хранит числа в дополнительном коде (далее ДК). То есть абсолютное значени отрицательного числа (т.е. у которого старший бит =1) можно всего получить, инвертируя всё, кроме знака и прибавляя 1.

~1110110(2)=0001001(2)

00001001(2)+1 = 00001010(2)=10(10) - итого, модуль числа 10.

Результат: -10



Подробнее про дополнительный код здесь: Дополнительный код
« Последнее редактирование: Март 24, 2008, 09:19:59 от EvilMax » Записан

Оптимальная концентрация кофе - это когда код уже дает советы, как его написать, но еще не спорит с тобой и не подкалывает в случае неудач...
---
Существует три способа распространения программного обеспечения: воровство, грабёж и обмен краденым. (c) Неизвестный программист
Артем
sprata
Mодератор
Завкаф
*****

Карма: +40/-5
Offline Offline

Пол: Мужской
Сообщений: 1107


« Ответ #24 : Март 24, 2008, 09:54:52 »

EvilMax, спасибо большое, что объснили !
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.11 секунд. Запросов: 29.