Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
1

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

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

Добрый день!

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

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

Выводится 9?

Что в данном случае означают << и >>?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.07.2012, 08:41
Ответы с готовыми решениями:

Не работает unitTest в конкретном случае
Пытаюсь написать Unit Test на метод, он находится в Form1? не смотрите на качество кода, это...

Как правильно сделать перенаправление в конкретном случае пагинация
Добрый день есть правила которые я использую RewriteRule ^Категория1/(+)/(+)-(+)/?$...

Как сделать правильную архитектуру таблиц в конкретном случае?
Есть таблица parse в ней поле title, и поле text. Проблема в том что в поле text может храниться...

Что означают -> в c++ ?
c++ не использую, но интересует что в c++ означает конструкция -&gt; , к примеру...

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

Добавлено через 1 минуту
И на MSDN-е тоже доступно описано http://msdn.microsoft.com/ru-r... y192e.aspx
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.07.2012, 08:59 3
Если по русски, то х = 1 + 2*4 + 2/16
Что и равно девяти.
И ты забыл использовать у.
0
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-r... f1t6a.aspx (и по идеи должно 9-ть выходить, но алгоритм другое считает=-O)



Добавлено через 13 минут
Короче в ступоре я http://liveworkspace.org/code/... bdd1bbddcb
От студии идёт ворнинг
: check operator precedence for possible error; use parentheses to clarify precedence
видимо надо явно указать приоритет операций и тогда всё заработает как ожидается
http://liveworkspace.org/code/... 0cff908751
0
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 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
Вот чёрт побьери:D

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

0
yleart
14.07.2012, 10:04
  #9

Не по теме:

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

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

Добавлено через 49 секунд
Цитата Сообщение от yleart Посмотреть сообщение
вычисляется вроде бы быстрее
Вычисляется может и не быстрее (процессором), а вот регистров требуется вдвое меньше.
0
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
Делаю внезапно и красиво
Эксперт С++
1309 / 1224 / 72
Регистрация: 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
0 / 0 / 0
Регистрация: 14.07.2012
Сообщений: 10
14.07.2012, 10:28  [ТС] 13
Вот! Спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2012, 10:28

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Что означают [] ?
MOV ,0B800H ;установка START_VRAM на видеопамять Что означают квадратные скобки в START_VRAM?...

Что означают данные
Здравствуйте. подскажите что могут означать данные следующего характера? DWORD...

Что означают 2 строчки на C#
Добрый день, есть код: public void SetRotation (string opt) { bool rotate; ...


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

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

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