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

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

Войти
Регистрация
Восстановить пароль
 
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
#1

Что означают << и >> в конкретном случае? - C++

14.07.2012, 08:41. Просмотров 1042. Ответов 12
Метки нет (Все метки)

Добрый день!

Подскажите, пожалуйста, почему

int x,y,z
y=8
z=2
x=1
x=x+z<<2+z>>4

Выводится 9?

Что в данном случае означают << и >>?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2012, 08:41     Что означают << и >> в конкретном случае?
Посмотрите здесь:

Что означают != - C++
Помогите разобраться, что означает знак !=

Что означают -> в c++ ? - C++
c++ не использую, но интересует что в c++ означает конструкция -&gt; , к примеру Chart1-&gt;Series-&gt;CheckDataSource(); в других языках в этих...

Что означают данные - C++
Здравствуйте. подскажите что могут означать данные следующего характера? DWORD poffsets::dw_m_lifestats() {...

Что означают параметры %d, %s, %f и т.д.? - C++
Появилась проблема с выводом переменных в MessageBox. В MSDN нарыл это: #include &lt;stdio.h&gt; int main( void ) { char ...

что означают операторы +, -, *, ++, --, +=, -=, *=, = - C++
Здравствуйте! что означают операторы +, -, *, ++, --, +=, -=, *=, = ???? Спасибо!

Что означают 3 слэша ///? - C++
Решил почитать текст включаемых файлов и обнаружил там в больших количествах вот такой символ &quot;///&quot;, объясните пожалуйста что это.

Что означают эти конструкции? - C++
Вот начал изучать cpp , до этого изучал несколько языков, таких как pawn,php и т.д. Вопросы: 1) Что означают такие конструкции как (тип...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
14.07.2012, 08:51     Что означают << и >> в конкретном случае? #2
Natta, эти выражения означают побитовый сдвиг влево и вправо, почитай в вики о сдвигах для общего представления http://ru.wikipedia.org/wiki/Битовый_сдвиг

Добавлено через 1 минуту
И на MSDN-е тоже доступно описано http://msdn.microsoft.com/ru-ru/library/k2ay192e.aspx
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2012, 08:59     Что означают << и >> в конкретном случае? #3
Если по русски, то х = 1 + 2*4 + 2/16
Что и равно девяти.
И ты забыл использовать у.
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 09:07  [ТС]     Что означают << и >> в конкретном случае? #4
Спасибо огромное за ответы и ссылки!

А у не забыт, просто это кусочек был...
-=ЮрА=-
Заблокирован
Автор FAQ
14.07.2012, 09:50     Что означают << и >> в конкретном случае? #5

Не по теме:

Deviaphan, там почему-то не 9-ть (http://codepad.org/MkFY3NqD) приоритет у сдвига выше чем у суммирования http://msdn.microsoft.com/ru-ru/library/fatf1t6a.aspx (и по идеи должно 9-ть выходить, но алгоритм другое считает)



Добавлено через 13 минут
Короче в ступоре я http://liveworkspace.org/code/1a6fbd...034ebdd1bbddcb
От студии идёт ворнинг
: check operator precedence for possible error; use parentheses to clarify precedence
видимо надо явно указать приоритет операций и тогда всё заработает как ожидается
http://liveworkspace.org/code/84028a...b8340cff908751
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2012, 09:52     Что означают << и >> в конкретном случае? #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
приоритет у сдвига выше чем у суммирования
Гы.) Наоборот. У суммирования 12, а у сдвига 11.
Поэтому запись эквивалентна int x = (x + z)<<(2 + z)>>4;
Потому и 3 получается.
Хорошо, что у меня есть привычка приоритеты вручную проставлять, а то бы я напрограммировался бы...
yleart
14.07.2012, 09:54
  #7

Не по теме:

Приоритет этого выражения:

C++
1
x = ((1+z) << (2 + z)) >> 4

-=ЮрА=-
14.07.2012, 10:02
  #8

Не по теме:

Deviaphan, yleart, всё понял - накосил с приоритетами, каким то чёртом вместо по высшему приоритету операнда делал по низшему
Надо 3<<4 а затем 48>>4
Вот чёрт побьери

Цитата Сообщение от Deviaphan Посмотреть сообщение
Если по русски, то х = 1 + 2*4 + 2/16
- вот это ток не понял

yleart
14.07.2012, 10:04
  #9

Не по теме:

при сдвиге влево число увеличивается в 2 раза, в право уменьшается, простой пример:
3 это 011 в 2-ой системе, 3 << 1 = 110, т.е. 6 в 10-ой
и вычисляется вроде бы быстрее

Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2012, 10:08     Что означают << и >> в конкретном случае? #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
вот это ток не понял
Не ты один приоритеты попутал.))) А там я сдвиги на эквивалентные умножение/деление заменил, если бы приоритет сдвигов больше сложения был.)

Добавлено через 49 секунд
Цитата Сообщение от yleart Посмотреть сообщение
вычисляется вроде бы быстрее
Вычисляется может и не быстрее (процессором), а вот регистров требуется вдвое меньше.
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 10:17  [ТС]     Что означают << и >> в конкретном случае? #11
Ой, ребят... Простите новичка-новичка Я исправлюсь. Но пока что-то у меня не понимается...

х = 1 + 2*4 + 2/16
Что и равно девяти.

Каким образом??

Для обобщения и понимания можно еще один пример?

int x,y,z
y=8
z=2
x=y<<2+z>>2

Почему 32?

x=8<<2+2>>2
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2012, 10:20     Что означают << и >> в конкретном случае? #12
Цитата Сообщение от Natta Посмотреть сообщение
х = 1 + 2*4 + 2/16
Что и равно девяти.
Это я тебе наврал и уже извинился.)


Цитата Сообщение от Natta Посмотреть сообщение
y=8
z=2
x=y<<2+z>>2
Почему 32?
x = (8 << (2+2)) >> 2;
x = 8 *16 / 4
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2012, 10:28     Что означают << и >> в конкретном случае?
Еще ссылки по теме:

Что означают эти 2 определения? - C++
Компилируемый язык со статической типизацией. Сочетание высокоуровневых и низкоуровневых средств.

Что означают данные процедуры??? - C++
Можете объяснить что делает программа построчно? (например: вводит переменную выводит строку Enter number of...

Что означают переменные в моей программе? - C++
Что означает строчка в программе Data=сh+data, а точнее , что такое ch?

Поясните что означают некоторые функции - C++
1- что означает эта строка? int f(char *s, char *c, int n) { 2-int main(int argc, char* argv) { 3 setlocale 4 #include...

Объясните,что означают эти строки. - C++
Списал код из учебника(о представлен ниже).Все работает,нареканий нет.После был анализ этого кода с разжевыванием происходящего,но...


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

Или воспользуйтесь поиском по форуму:
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 10:28  [ТС]     Что означают << и >> в конкретном случае? #13
Вот! Спасибо!
Yandex
Объявления
14.07.2012, 10:28     Что означают << и >> в конкретном случае?
Ответ Создать тему
Опции темы

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