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

С++ для начинающих

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

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

21.07.2013, 14:53. Просмотров 1853. Ответов 62
Метки нет (Все метки)

Простите пожалуста, если я не видел аналогичной темы.

Вот

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

Как-то не ложится в мозг. Тупо читал минут 15, неи очень что-то понял.. Можно пожалуста на примерах?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 14:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обьясните понятие как работает Операция языка (C++):

Обьясните как работает рекурсия - C++
#include <iostream> using namespace std; int Multiply(int, int); int main() { int number; int exponent; cout<<"Enter...

Обьясните, как работает цикл - C++
#include <iostream> #include <string> using namespace std; int main() { int j = 0; string str,str1; cout<<"Enter str ";...

обьясните пожалуйта как работает программа - C++
#include <sstream> #include <iostream> int main() { std::stringstream ss; long int u, count = 0; std::cout <<"Vvedite celoe...

Обьясните как работает рекурсия в данной задаче - C++
есть вот такая програмка: #include <stdio.h> #include <conio.h> int a,cnt=0,N,K; void fun(long S, int tek) { ...

метод гауса..обьясните как работает программа - C++
ipMatr(); for(opMatr(),k=0;k<=n;k++) //прямой ход метода Гаусса; {for(aa=fabs(a),i=k,j=k+1;j<=n;j++)//поиск макс....

Функция C++ в php или обьясните по подробнее как она работает - C++
typedef std::basic_ostringstream<Char> OStringStream; std::string ByteArrayToHexStr(uint8 const* bytes, uint32 arrayLen) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:09 #31
Ты не прав. Ты зачем то начал объяснять как выглядит отрицательное число в двоичном представлении, и объяснять не правильно. Оно так не выглядит. Если бы я этого не знал то непременно бы запутался от твоих слов.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:15 #32
Цитата Сообщение от lazybiz Посмотреть сообщение
ты вводил участников форума в заблуждение
Окай, я прошу участников форума простить меня за то, что я не уточнил, что прямой код - это беспантово и его ни в коем случае нельзя использовать в своей голове и рассуждениях...
Тем не менее ТС понял смысл сдвига и получил ответ адекватный его знаниям.

Добавлено через 3 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
Ты зачем то начал объяснять как выглядит отрицательное число в двоичном представлении, и объяснять не правильно.
Я всё объяснил правильно!!! Ещё раз повторяю:
то что алгоритмически удобнее использовать в архитектуре компьютера ещё не значит, что нельзя иначе.
Т.е. Вы хотите сказать, что прямой код не реализуем в принципе? Обратный используется потому что с ним удобнее работать. Фразу "В компьюетере используется только прямой код" я не писал вроде.

Добавлено через 1 минуту
Цитата Сообщение от lazybiz Посмотреть сообщение
отрицательное число в двоичном представлении
Отрицательное число в двоичном представлении выглядит именно так! Непосредственно в ЭВМ - соглашусь, я не прав буду, если скажу так, а в самом представлении я не ошибся.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:15 #33
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вы хотите сказать, что прямой код не реализуем в принципе?
Я говорю что в современных ПК используется Дополнительный код. Твоё объяснение не несет никакой практической пользы.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:22 #34
Цитата Сообщение от lazybiz Посмотреть сообщение
Твоё объяснение не несет никакой практической пользы.
Почитайте основы. Теорию двоичной системы. Я всё правильно написал и ТС всё правильно понял. Форум не посвящён компьютерному железу. То что дополнительный код удобно использовать ещё не значит, что он протеворечит прямому коду. Не несёт пользы говорите? А мне показалось, что ТС написал, будто ему всё стало понятно, хотя Вам же виднее ;-)
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:31 #35
Разумеется он написал что ему все понятно, он же не знал что у него в компьютере отрицательные числа имеют не такое представление.

Не по теме:

Полагаю что ты даже не знаешь где используется прямой код в чистом виде..
Правильно тебе сказали:

Цитата Сообщение от Thinker Посмотреть сообщение
Не по теме:
видите. поучая ТС, сами чему-то научитесь.
хотя еще не факт...

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:49 #36
Цитата Сообщение от lazybiz Посмотреть сообщение
у него в компьютере
Вы прикалываетесь сейчас?) Или тупо поспорить хочется?)
Цитата Сообщение от lazybiz Посмотреть сообщение
он же не знал что у него в компьютере отрицательные числа имеют не такое представление
Ему это и не надо знать, по крайней мере пока что. Я из-за таких дотошных учителей сначала испугался, думал, что программирование - это кошмар, но мне попался хорошо объясняющий на русском языке основы человек, а дальше я сам всё начал учить, опираясь на простые истины. А Вы с ходу убиваете весь энтузиазм у будущего, возможно, невероятно талантливого программиста из-за каких-то мелочных архитектурных особенностей ПК. Он программист, ему не придётся паять микросхемы. Все азы правильно объяснять в прямом коде - так делают в ВУЗах, потом со временем поясняют, мол это всё правильно, но когда-то один умник выдумал обратный код для ускорения вычитания и поэтому архитектура компа иная. И что? Операция сдвига от иного представления числа не меняет своего смысла.

Добавлено через 7 минут
Цитата Сообщение от lazybiz Посмотреть сообщение
сами чему-то научитесь.
хотя еще не факт...
То что мне нужно я уже знаю и мне хватает с головой. То что не знаю выучу когда понадобится. Об обратном коде я знаю много чего и вообще об архитектуре компьютера. Транзисторы, триггеры и прочую ересь, но мне эти знания ещё не пригодились при программировании. Так что предлагаю заканчивать дискуссию о том кто умнее - Вы наверняка очень умный, но тема обсуждения иная и ТС вроде удовлетворился ответом.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.07.2013, 16:53 #37
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Почитайте основы. Теорию двоичной системы.
хорошо покажи сколько в теории число -2
что есть дополнительный код ?
что есть обратный код ?
и в чем их преимущество?
почему для отрицательных используют дополнительный а не обратный код
есть ли разница для сдвига вправо для знакового и безнакового числа?
а для ТС проше объяснить на 10чном коде
сдвиг влево вправо это деление умножение на 2
если представим что не на 2 а на 10( это не соответствует действительности так для иллюстрации)
число 10 сдвинули вправо значит второй разряд ушел на место первого а первый потерялся
получили 1 все равно что поделили на 10
число 10 сдвинули влево в третий разряд ушел второй во второй ушел первый а в первый записали 0
получили 100 все равно что умножили на 10

теперь вернемся к двоичным
10(2) сдвинуть вправо получили 1(1), все равно что разделили на 2
10(2) сдвинули влево получили 100(4),все равно что умножили на 2

Добавлено через 1 минуту
Цитата Сообщение от Retyrn0 Посмотреть сообщение
то? Операция сдвига от иного представления числа не меняет своего смысла.
серьезно?
арифметический и логический сдвиг это одно и тоже?
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 16:54  [ТС] #38
Так, в начале отрицателього числа стоит единица. Так? Тогда чем оно отличается от такого же положительного числа? Допустим, 10000001=129 и все тут?

Спасибо за развёрнутую биседу!
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 17:08 #39
Цитата Сообщение от ValeryS Посмотреть сообщение
арифметический и логический сдвиг это одно и тоже
Вы что? Нет конечно! Это разные вещи.
Цитата Сообщение от ValeryS Посмотреть сообщение
хорошо покажи сколько в теории число -2
что есть дополнительный код ?
что есть обратный код ?
и в чем их преимущество?
почему для отрицательных используют дополнительный а не обратный код
есть ли разница для сдвига вправо для знакового и безнакового числа?
Товарищ преподаватель, мне уже все возможные экзамены в зачётке выставлены и зачётка благополучно выброшена)

Продолжайте в том же духе. Объясните ещё ТС что-то умное и "важное", чтобы он наверняка плюнул на программирование и пошёл, как нормальные пацанчики, на стройку.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.07.2013, 17:13 #40
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
ак, в начале отрицателього числа стоит единица. Так?
так, да не так
это в дополнительном коде
для того чтобы перевести число в дополнительный код нужно инвертировать его и добавить 1
например число 1 0000 0001 а -1 1111 1111
преимущество использования дополнительного кода выясняются при сложении положительных и отрицательных чисел
например 1+(-1)= 0000 0001 +1111 1111 =0000 0000
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Допустим, 10000001=129 и все тут?
а вот здесь уже разночтение
в прямом коде 129 в дополнительном -127
в языке Си для этого есть знаковые и безнаковые переменные (signed \ unsigned)

например
C++
1
2
signed char a=-127;
unsigned char =129;
если выведешь их HEX значения на экран
C++
1
printf(%x %x",a,b);
то получишь одно и тоже значение 0х81
поэтому диапазон значений signed char -128..127
unsigned char 0...255
число 129 ты в signed char не запишешь

Добавлено через 2 минуты
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вы что? Нет конечно! Это разные вещи.
абсолютно разные или иногда одинаковые?
Цитата Сообщение от Retyrn0 Посмотреть сообщение
мне уже все возможные экзамены в зачётке выставлены и зачётка благополучно выброшена)
т.е я так понимаю отчислен
потому что чтобы получить диплом нужно сдать зачетку и студенческий билет
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 17:13 #41
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так, в начале отрицателього числа стоит единица. Так? Тогда чем оно отличается от такого же положительного числа? Допустим, 10000001=129 и все тут?
Тебе сейчас товарищ Retyrn0 все объяснит...
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 17:17 #42
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Так, в начале отрицателього числа стоит единица. Так? Тогда чем оно отличается от такого же положительного числа?
Тем что в начале положительного числа стоит ноль. Т.е. крайний левый бит несёт в себе информацию о знаке.

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
т.е я так понимаю отчислен
Лучше бы отчислен ибо диплом мне никак не помог в поиске работы - 5 лет в трубу)
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.07.2013, 17:17 #43
Цитата Сообщение от Retyrn0 Посмотреть сообщение
1 1001= -9
это в какой же кодировке?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 17:19 #44
Цитата Сообщение от ValeryS Посмотреть сообщение
это в какой же кодировке
в пятибитной
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 17:20  [ТС] #45
Спасибо! Понятно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 17:20
Привет! Вот еще темы с ответами:

Нюансы синтаксиса: объяснить как работает тернарная операция в заданном фрагменте кода - C++
Всем доброго времени суток! Помогите разобраться с кодом. const char x = {"Jason ", "at your service\n"}; const char * y =...

Обьясните почему не работает - C++
Я новичек, помогите разобраться. #include <iostream> #include <windows.h> #include <ctime> #include <iomanip> using namespace...

Как работает операция взятия адреса "&"? - C++
В каждой переменной есть адрес,так вот,когда операция взятия адреса берёт адрес,она его копирует?И тогда адрес остаётся в переменной и в...

Странно работает тернарная операция - C++
Доброй ночи... if((i == 3)?(!(*BoolHash)):((*BoolHash))) cout << "\nError\n"; else {// Выполнение функции} Если i = 1 или 2...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru