Форум программистов, компьютерный форум CyberForum.ru

Обьясните понятие как работает Операция языка - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 14:53     Обьясните понятие как работает Операция языка #1
Простите пожалуста, если я не видел аналогичной темы.

Вот

Операции сдвига ( « и » ) применяются к целочисленным операндам. Они
сдвигают двоичное представление первого операнда влево или вправо на количество
двоичных разрядов, заданное вторым операндом. При сдвиге влево ( « ) освободившиеся
разряды обнуляются. При сдвиге вправо (>) освободившиеся биты
заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом
в противном случае. Операции сдвига не учитывают переполнение и потерю
значимости.

Как-то не ложится в мозг. Тупо читал минут 15, неи очень что-то понял.. Можно пожалуста на примерах?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 17:13     Обьясните понятие как работает Операция языка #41
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так, в начале отрицателього числа стоит единица. Так? Тогда чем оно отличается от такого же положительного числа? Допустим, 10000001=129 и все тут?
Тебе сейчас товарищ Retyrn0 все объяснит...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 17:17     Обьясните понятие как работает Операция языка #42
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так, в начале отрицателього числа стоит единица. Так? Тогда чем оно отличается от такого же положительного числа?
Тем что в начале положительного числа стоит ноль. Т.е. крайний левый бит несёт в себе информацию о знаке.

Интуитивно понятно должно быть:

- 1001 = 9
1 1001= -9
Т.е. минус меняется на "1", плюс остаётся "0".

Но это прямой код и его используйте исключительно для понимания происходящего, ибо как уточнили товарищи, в реальных условиях используется не прямой код - это потом, а именно для понимания проще объяснять на прямом коде.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
т.е я так понимаю отчислен
Лучше бы отчислен ибо диплом мне никак не помог в поиске работы - 5 лет в трубу)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
21.07.2013, 17:17     Обьясните понятие как работает Операция языка #43
Цитата Сообщение от Retyrn0 Посмотреть сообщение
1 1001= -9
это в какой же кодировке?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 17:19     Обьясните понятие как работает Операция языка #44
Цитата Сообщение от ValeryS Посмотреть сообщение
это в какой же кодировке
в пятибитной
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 17:20  [ТС]     Обьясните понятие как работает Операция языка #45
Спасибо! Понятно.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 17:29     Обьясните понятие как работает Операция языка #46
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Спасибо! Понятно.
Не за что. Когда "пережуёте" прямой код, товарищи правильно сказали, что он не актуален, почитайте про обратный.
Я пояснил на примере прямого кода потому что сам когда-то это учил и зная как всё происходит в прямом, проще было разобраться с обратным, но на самом деле он может Вам даже не пригодиться, ну мне ещё не пригодился)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
21.07.2013, 17:30     Обьясните понятие как работает Операция языка #47
Цитата Сообщение от Retyrn0 Посмотреть сообщение
в пятибитной
ну так сложи мне в своей пятибитной
-9+9=0
11001+01001=?

Добавлено через 1 минуту
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Когда "пережуёте" прямой код, товарищи правильно сказали, что он не актуален,
и кто это заявлял?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 17:43     Обьясните понятие как работает Операция языка #48
Цитата Сообщение от ValeryS Посмотреть сообщение
сложи мне в своей пятибитной
Цитата Сообщение от ValeryS Посмотреть сообщение
-9
Это вычитание, а не сложение, если что ;-)
Покажите мне строчку в вопросе ТС где фигурирует слово "сложение" или "вычитание"?
Вот там да, одним прямым кодом не обойтись. А Ваш пример-задача - там да, хитрыми манипуляциями вычитание превращается в сложение ;-)
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
21.07.2013, 17:55     Обьясните понятие как работает Операция языка #49
Dimka-novitsek, тебе со сдвигом то все понятно или еще что объяснить?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 17:58     Обьясните понятие как работает Операция языка #50
ValeryS, кстати, у меня вопрос не по теме, а данные именно хранятся в обратном коде или переводятся в него во время выполнения операций?
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 17:59  [ТС]     Обьясните понятие как работает Операция языка #51
Понятно!! Спасибо!!!
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
21.07.2013, 18:41     Обьясните понятие как работает Операция языка #52
Цитата Сообщение от Retyrn0 Посмотреть сообщение
данные именно хранятся в обратном коде или переводятся в него во время выполнения операций?
данные хранятся так же как и используются
все знакомые мне процессоры хранят положительные в прямом, отрицательные в дополнительном коде
у звуковых процессоров несколько иная картина(про те что я знаю)
отрицательные числа от 0 до 01111111(зависит от разрядности процессора ) 10000000 "0" дальше положительные значения связано это с работой АЦП ЦАП
но может быть и по другому, я просто не в курсе
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 19:27     Обьясните понятие как работает Операция языка #53
Цитата Сообщение от ValeryS Посмотреть сообщение
отрицательные числа от 0 до 01111111(зависит от разрядности процессора ) 10000000 "0" дальше положительные значения
Спасибо за разъяснения. А при вычитании unsigned чисел, вычитаемое нуждается же в преобразовании вроде?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
21.07.2013, 20:03     Обьясните понятие как работает Операция языка #54
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А при вычитании unsigned чисел, вычитаемое нуждается же в преобразовании вроде?
нет
у ассемблера (сиречь машинного кода ) есть команда для сложения ADD и вычитания SUB
Хотя в самом процессоре может и преобразуется,зависит от инженеров как они реализовали SUB
да и процессор не знает такого знаковый беззнаковый, он знает просто числа
рассмотрим пример
безнаковое сложение
255(FF) +1 (1)=1 00 т.е получился 0 и перенос в старший разряд, которого нет, переполнение разрядной сетки
т.е на языке Си это будет примерно так
(255+1)%256
теперь знаковое
-1(FF)+1(1)=1 00 тоже самое переполнение

теперь вычитание
255(FF)-1(1)=254(FE)
-1(FF)-1(1)=-2(FE)
как видишь никакой разницы в шестнадцатеричных значениях нет
и процессору они не нужны
это уже прерогатива языков высокого уровня ,при программировании на ассемблере программиста,
как интерпретировать числа с установленным старшим разрядом, как знаковое или как беззнаковое
кстати для знаковых возможны колизии которые нужно учитывать
C++
1
2
char a=127;
a++;// а стало -128
переполнение
чтобы этого не было нужно проверять результат
например
C++
1
2
3
4
5
char a=100;
char b= 100;
if(a+b<a)
  return error;
return a+b;
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 20:18     Обьясните понятие как работает Операция языка #55
Цитата Сообщение от ValeryS Посмотреть сообщение
чтобы этого не было нужно проверять результат
Ну это само собой разумеется. Спасибо!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 20:55     Обьясните понятие как работает Операция языка #56
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Я с удовольствием последую Вашему совету, если Вы объясните где я не прав-то?
смотрите. рассмотрим 4-х разрядные числа:

-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110
-1 1111

1100 >> 2 по сути это деление на 4.
-4 / 4 = -1 == 1111
стало понятнее?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 21:08     Обьясните понятие как работает Операция языка #57
Цитата Сообщение от Thinker Посмотреть сообщение
стало понятнее?
Это было понятно давно. как это относиться к сдвигу прямого кода, который я объяснял ТС?
В вопросе была фраза "как компьютер производит двоичный сдвиг"? Или ему нужно было понять что делают операторы "<<" и ">>"? Я уже много раз проверил своё объяснение на программе - ни одного противоречия не возникло. каждое моё утверждение выполняется на реальном компьютере. На примере прямого кода сдвиг объяснить значительно проще и понятнее ИМХО, что и стало причиной данного спора. В своё время ТС, при необходимости, узнает о массе вещей, которые используются в реальных компьютерах, а сейчас ему это знать не нужно. Я по себе знаю как это, когда "умные дядьки" рассказывают простые вещи сложным языком и мне такой подход крайне не нравился. Сейчас я упростил объяснение. Какие вопросы?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 21:10     Обьясните понятие как работает Операция языка #58
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Это было понятно давно.
это был комментарий к этому
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Да ладно? Разве?

1100>>2=1001
сообщению.

Не по теме:

отлучался, сразу не мог написать

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
21.07.2013, 21:19     Обьясните понятие как работает Операция языка #59
Цитата Сообщение от Thinker Посмотреть сообщение
это был комментарий к этому
Сообщение от Retyrn0
Да ладно? Разве?
1100>>2=1001
сообщению.
Извиняюсь, я не догадался сразу, что это не прямой код. У меня есть отмазка - я не экстрасенс =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 21:21     Обьясните понятие как работает Операция языка
Еще ссылки по теме:

Как переписать программу используя понятие класса C++
Не работает операция switch-case C++
Обьясните почему не работает C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 21:21     Обьясните понятие как работает Операция языка #60
Цитата Сообщение от Retyrn0 Посмотреть сообщение
я не догадался сразу, что это не прямой код.

Не по теме:

ну, тогда все точки над и расставлены.

Yandex
Объявления
21.07.2013, 21:21     Обьясните понятие как работает Операция языка
Ответ Создать тему
Опции темы

Текущее время: 18:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru