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

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

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

Что это может значить??? - C++

16.12.2010, 23:25. Просмотров 698. Ответов 19
Метки нет (Все метки)

Изучая одну программу наткнулся на:

if (!(dir[x][y] >> 1 & 1))

кого-нибудь знаетчто это такое?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 23:25     Что это может значить???
Посмотрите здесь:

подчеркивает запятую после 50, что это может быть? - C++
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> #include "graphics.h" void main(void) { int...

[C/C++]Компилятор g++.Странности с true и false.Кто нибудь может прокомментировать/повторить это у себя? - C++
Заметил такую странность: Это проходит компиляцию bool *b = false; А это нет bool *b = true; error: cannot convert ‘bool’ to...

Что это за метод?И что он делает? - C++
double func (double y, int k, int n){ double y1; for (int i=0; i<=n+1;i++) y1=0; double t; t=0; y1=1; ...

Объектный модуль. Он всегда один или их может быть несколько после компиляции? От чего это зависит? - C++
И напишите пожалуйста определение для объектного модуля более простым языком. Читал про него в википедии..не все понял. Так же есть еще...

** - что это? - C++
long ** mass; Что это значит? Если бы было написано long *mass; - это объявление указателя mass типа int. Но две звездочки что...

что это? - C++
illegal else without matching if что это?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:32     Что это может значить??? #2
Побитовые операции. Сдвиг вправо, побитовое И.
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:34  [ТС]     Что это может значить??? #3
т.е. сдвиг вправо на 1 в массиве dir[x][y]?
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:37     Что это может значить??? #4
SergeyM,нет сдвиг на 1 бит вправо числа dir[x][y];
Например, dir[x][y] = 2; В двоичном коде это будет 0...010, после сдвига получится 0...001, т.е. число 1;
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:39  [ТС]     Что это может значить??? #5
аааа понятно
а ! - это просто часть синтаксиса?
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:41     Что это может значить??? #6
логическое отрицание
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:43     Что это может значить??? #7
Кстати, вопрос, что собственно проверяет условие в первом посте? Кратно ли число 4-м?
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:47  [ТС]     Что это может значить??? #8
значит f (!(dir[x][y] >> 1 & 1)) означает, что
если сдвиг на 1 бит вправо числа dir[x][y] не равно 1 то ... ???
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:49     Что это может значить??? #9
SergeyM, нет, & это побитовое "И". Пример: 5&3 = 101 & 011 = 001 = 1;
Соответственно полученное в итоге (после >> и &) число будет сравниваться с нулем (свойство !(num), не знаю как объяснить)
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:50  [ТС]     Что это может значить??? #10
ну ладно примерно понял)
спасибо
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:54     Что это может значить??? #11
SergeyM, проверяется будет ли после сдвига на 1 бит последний бит 0. В целом тут проверяется на четность/нечетность dir[x][y]
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:56     Что это может значить??? #12
besstiaa, чет/нечет это же без сдвига вроде. А со сдвигом что-то для меня, увы, непонятное.
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
17.12.2010, 00:01     Что это может значить??? #13
Да точно. Ну сдвиг вправо - это вроде как деление на 2 в степени n, где n - число бит сдвига. В данном случае получается, что проверяется на четность/нечетность результат деления dir[x][y]/2
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
17.12.2010, 02:24     Что это может значить??? #14
сдвиг влево/вправо эквивалентен умножению/делению на основание системы счисления, в ЭВМ система счисления двоичная, стало быть сдвиг влево/вправо это умножение/деление на 2.
Тут число делится на два и проверяется остаток - есть 1 то число не четное, 0 - четное.
Просто приоритеты операторов в такой записи:
if (!(dir[x][y] >> 1 & 1));
вот такие:
if (not((dir[x][y] >> 1) & 1));.

P. S. Чета я проглядел, что такой ответ уже дали извиняюсь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 03:58     Что это может значить???
Еще ссылки по теме:

Что может вернуть функция? - C++
Я знаю что функция может вернуть значение, указатель и структуру, и составил примеры этих функций - это что-то типа конспекта, но мне...

Что может возвращать выражение в С++? - C++
В стандарте написано, что "Выражение может возвращать значение в качестве результата и может вызывать побочные эффекты." Правильно ли...

Что может делать функция - C++
Подскажите пожалуйста, что может делать такая ф-ция void ReplaceAll(const String& ob1, const String& ob2); Добавлено через 4 минуты ...

что означает это - C++
int a=5; a<<=3; cout<<a; выводит 40 оО


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.12.2010, 03:58     Что это может значить??? #15
if срабатывает, если после деления числа из массива на два получилось чётное число
Yandex
Объявления
17.12.2010, 03:58     Что это может значить???
Ответ Создать тему
Опции темы

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