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

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

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

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

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

Добрый день!

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

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

Выводится 9?

Что в данном случае означают << и >>?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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++
Помогите разобраться, что означает знак !=

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

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

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

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

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

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

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

Не по теме:

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

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

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

Не по теме:

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

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

0
yleart
14.07.2012, 10:04
  #9

Не по теме:

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

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

Добавлено через 49 секунд
Цитата Сообщение от yleart Посмотреть сообщение
вычисляется вроде бы быстрее
Вычисляется может и не быстрее (процессором), а вот регистров требуется вдвое меньше.
0
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
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 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
1
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 10:28  [ТС] #13
Вот! Спасибо!
0
14.07.2012, 10:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2012, 10:28
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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