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

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

Восстановить пароль Регистрация
 
Natta
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 08:41     Что означают << и >> в конкретном случае? #1
Добрый день!

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

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++ Что означают параметры %d, %s, %f и т.д.?
C++ что означают операторы +, -, *, ++, --, +=, -=, *=, =
Что означают данные процедуры??? C++
C++ Что означают !=
C++ Что означают данные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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++
 Аватар для Deviaphan
1283 / 1217 / 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++
 Аватар для Deviaphan
1283 / 1217 / 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++
 Аватар для Deviaphan
1283 / 1217 / 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++
 Аватар для Deviaphan
1283 / 1217 / 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     Что означают << и >> в конкретном случае?
Еще ссылки по теме:

Что означают эти конструкции? C++
C++ Что означают -> в c++ ?

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

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

Текущее время: 04:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru