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

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

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

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

21.07.2013, 14:53. Просмотров 1859. Ответов 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) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 15:42 #16
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Так вот, если переменная может хранить отрицательное значение (тип signed), то все биты будут сдвигаться так же, как в беззнаковом (unsigned), кроме крайнего левого - он будет всегда оставаться неизменным. Вот и всё - всё просто)
1100 >> 2 == 1111
как такой расклад?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 15:44 #17
Цитата Сообщение от Thinker Посмотреть сообщение
а можно с этого места поподробнее?
Вы не слышали, что архитектура компьютера не имеет стандартного количество битов? ;-)
Удобно строить системы с битностью, кратной 8. Кроме 64 -битной архитектуры вполне могут существовать 128-битные. И если я не ошибаюсь, то вроде когда-то читал, что существуют - они используются учёными там, где нужны вычисления с повышенной точностью.

Добавлено через 2 минуты
Цитата Сообщение от Thinker Посмотреть сообщение
1100 >> 2 == 1111
Да ладно? Разве?

1100>>2=1001
Если я правильно понял, то это знаковый тип, 1слева указывает на то, что число отрицательное, а значит сдвигу подвергнутся все биты кроме левого, а левый останется без изменений.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 15:45 #18
Цитата Сообщение от Retyrn0 Посмотреть сообщение
вполне могут существовать 128-битные.

Не по теме:

так о чем то и речь. когда повсеместно появятся 126-битные системы, некоторые задачи будет намного легче решать, но пока, увы...

castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 15:45 #19
Retyrn0, Дополнительный код (http://wiki.mvtom.ru/index.php/%D0%A...BA.D0.BE.D0.B4)
Отрицательные числа хранятся не так как ты думаешь.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 15:49 #20
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Да ладно? Разве?
1100>>2=1001

Не по теме:

видите. поучая ТС, сами чему-то научитесь.

Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 15:53 #21
Цитата Сообщение от Thinker Посмотреть сообщение
появятся 126-битные системы
Ну это врядли, 128-битные, а 126 не входит в последовательность степеней двойки, только если использовать не 2-ю систему.
Цитата Сообщение от lazybiz Посмотреть сообщение
Дополнительный код (http://wiki.mvtom.ru/index.php/%D0%A...BA.D0.BE.D0.B4)
Отрицательные числа хранятся не так как ты думаешь.
Оттуда взята цитата:
Представление числа в привычной форме "знак"-"величина", при которой старший разряд ячейки отводится под знак, а остальные - под запись числа в двоичной системе, называется прямым кодом двоичного числа. Например, прямой код двоичных чисел 1001 и -1001 для 8-разрядной ячейки равен 00001001 и 10001001 соответственно.(с)

Теперь объясните разницу с тем, что писал я? Мы сейчас рассматриваем прямой код? И где я не прав? Я извинюсь, если что ;-)
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 15:55 #22
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Оттуда взята цитата:
Не прямой, а дополнительный!
В ссылке якорь не на том месте.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 15:56 #23
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Ну это врядли, 128-битные, а 126 не входит в последовательность степеней двойки, только если использовать не 2-ю систему.
не так записал, естественно, речь о 128

Цитата Сообщение от Retyrn0 Посмотреть сообщение
Оттуда взята цитата:
я не экстрасенс откуда вы берете фразы, но поподробнее почитайте о сдвигах, особенно, чисел со знаком
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 15:58 #24
Цитата Сообщение от Thinker Посмотреть сообщение
видите. поучая ТС, сами чему-то научитесь.
Я сейчас не понял?) Я не правильно посчитал?)

Добавлено через 44 секунды
Цитата Сообщение от lazybiz Посмотреть сообщение
Не прямой, а дополнительный!
А какое отношение имеет дополнительный код к операциям сдига?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 15:59 #25
Цитата Сообщение от Retyrn0 Посмотреть сообщение
А какое отношение имеет дополнительный код к операциям сдига?
Цитата Сообщение от lazybiz Посмотреть сообщение
Отрицательные числа хранятся не так как ты думаешь.
Ты прям деревянный какой-то.. Тебе же сказали что отрицательные числа в ПК хранятся в Дополнительном коде!
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:01 #26
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <windows.h>
 
void main()
{
    signed int x=-4;//это ваше 1100
    x=x>>2;
    printf("%d\n",x);//результат вывода -1, что соответствует 1001
}
Цитата Сообщение от Thinker Посмотреть сообщение
поподробнее почитайте о сдвигах, особенно, чисел со знаком
Я с удовольствием последую Вашему совету, если Вы объясните где я не прав-то?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:02 #27
Тут ты не прав:
Цитата Сообщение от Retyrn0 Посмотреть сообщение
-2 в 2-й системе = 1010 - разница только в крайнем левом бите.
Следуй моему совету.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:03 #28
Цитата Сообщение от lazybiz Посмотреть сообщение
отрицательные числа в ПК хранятся в Дополнительном коде
Операцию сдвига можно рассматривать, как чёрный ящик, особенно начинающему С++.
Мы будем пугать просящего помощи сложными для него понятиями типа обратного кода или ответим на вопрос что есть побитовый сдвиг?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 16:04 #29
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Мы будем пугать просящего помощи сложными для него понятиями типа обратного кода
А я не ему об этом говорил, я тебя поправлял, т.к. ты вводил участников форума в заблуждение, особенно тех кто в этом мало разбирается.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 16:07 #30
Цитата Сообщение от lazybiz Посмотреть сообщение
Следуй моему совету
Человек попросил помощи. Я ему дал понять что происходит при побитовом сдвиге на примере прямого кода, для наилучшего понимания. ТС новичёк? Ему сходу нужно знать чудеса обратного кода? Думаю для понимания я всё написал верно, а то как инженеры воплотили компьютерную математику ТС знать пока не обязательно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 16:07
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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