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

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

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

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

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

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

Вот

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

Как-то не ложится в мозг. Тупо читал минут 15, неи очень что-то понял.. Можно пожалуста на примерах?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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) { ...

62
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 14:54 #2
Цитата Сообщение от Dimka-novitsek Посмотреть сообщение
Операции сдвига ( « и » )
Нет, << и >>. Это не кавычки.
1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 14:56  [ТС] #3
Это я скопировал из текста. Я ещё не очень врубаюсь, что там.

Ну да, это не ковычки, это операции сдвига. Но всё же что куда двжется?
0
0x10
2465 / 1637 / 240
Регистрация: 24.11.2012
Сообщений: 4,039
21.07.2013, 15:08 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Dimka-novitsek, откройте стандартный виндовый калькулятор. "Вид -> программист". Увидите кнопки Lsh, Rsh.
Lsh - left shift - <<
Rsh - right shift - >>
Работают так: вводите число, нажимаете на клавишу операции, вводите количество разрядов, на которые нужно произвести сдвиг, enter.
Играться до полного просветления.
3
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.07.2013, 15:14 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main()
{
   int i = 1;                   //i == 1 //0000 0000 0000 0000 0000 0000 0000 0001
   i <<= 1;
   std::cout << i << std::endl; //i == 2 //0000 0000 0000 0000 0000 0000 0000 0010
   i <<= 1;
   std::cout << i << std::endl; //i == 4 //0000 0000 0000 0000 0000 0000 0000 0100
   i <<= 1;
   std::cout << i << std::endl; //i == 8 //0000 0000 0000 0000 0000 0000 0000 1000
}
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
   int x = 42; 
   int y = 10;
   x <<= y; // x = x * 2^y
   std::cout << x << std::endl; 
   x >>= y; // x = x / 2^y
   std::cout << x << std::endl;
}
3
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
21.07.2013, 15:16 #6
delete
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.07.2013, 15:17 #7
delete
0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 15:19  [ТС] #8
Нашол Вид . Программиста не нашол. Lsh жал без ризультата, Rsh не нашол. Нажал на равно- вместо цифры, недопустимая операция.
0
Миниатюры
Обьясните понятие как работает Операция языка  
0x10
21.07.2013, 15:21
  #9

Не по теме:

Вот такого поворота я не ожидал...

0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 15:22  [ТС] #10
Спасибо!!! Читаю.
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 15:25 #11
операция сдвига на один бит почти равносильна умножению или делению на 2, без остатка.

На примере:

(1000>>1)=0100
(0001<<1)=0010
Случаи с переполнением:
(1000<<1)=0000 // единичный бит сдвигается влево, но так как дальше некуда переносить его, он тупо теряется
(0001>>1)=0000 // тоже самое, только вправо - бит теряется

Здесь 4-х битный тип данных для простоты, в реале битов 8,16,32,64 и др.
1
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 15:27  [ТС] #12
Спасибо!!
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
21.07.2013, 15:28 #13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
и др.

Не по теме:

а можно с этого места поподробнее?

0
Dimka-novitsek
14 / 14 / 0
Регистрация: 26.04.2012
Сообщений: 1,091
21.07.2013, 15:31  [ТС] #14
Риально понятно!!!!!! Спасибо!!
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
21.07.2013, 15:40 #15
Не за что! Меня когда-то умные дядьки посылали по сяким ссылкам, а я решил, что быстрее самому всё методом тыка понять - вот основная идея операции сдвига. Нужно учесть, что это сдвиг положительного числа.

Если, например, число отрицательное, то крайний левый (знаковый) бит имеет значение 1 - оно там и останется, т.е. все биты сдвинутся, а первый слева бит так и останется 1.

Пример:

2 в 2-й системе = 0010,
-2 в 2-й системе = 1010 - разница только в крайнем левом бите. Так вот, если переменная может хранить отрицательное значение (тип signed), то все биты будут сдвигаться так же, как в беззнаковом (unsigned), кроме крайнего левого - он будет всегда оставаться неизменным. Вот и всё - всё просто)
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 15:40
Привет! Вот еще темы с ответами:

Нюансы синтаксиса: объяснить как работает тернарная операция в заданном фрагменте кода - 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...


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

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

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