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

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

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

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

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

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

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

кого-нибудь знаетчто это такое?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2010, 23:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что это может значить??? (C++):

ошибка Id returned 1 exit status что может значить? - C++
при компиляции программы выдается такая ошибка undefined reference to "WinMain@16" Id returned 1 exit status без указания...

Кто-нибудь может подробно объяснить, что такое allocators, зачем это и что с ними делать? Нигде не нашёл инфы - C++
Заранее спасибо.

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

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? - C++
Вот еще один вопрос зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может...

может это и оффтоп, но все же интересно) - C++
Всем доброго времени суток, вчера VS2008 мне выдавал совершенно нелепые ошибки типа необъявленный cout (про cin ничего не говорил:)), потом...

19
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:32 #2
Побитовые операции. Сдвиг вправо, побитовое И.
0
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:34  [ТС] #3
т.е. сдвиг вправо на 1 в массиве dir[x][y]?
0
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;
1
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:39  [ТС] #5
аааа понятно
а ! - это просто часть синтаксиса?
0
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:41 #6
логическое отрицание
0
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:43 #7
Кстати, вопрос, что собственно проверяет условие в первом посте? Кратно ли число 4-м?
0
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 то ... ???
0
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:49 #9
SergeyM, нет, & это побитовое "И". Пример: 5&3 = 101 & 011 = 001 = 1;
Соответственно полученное в итоге (после >> и &) число будет сравниваться с нулем (свойство !(num), не знаю как объяснить)
1
SergeyM
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:50  [ТС] #10
ну ладно примерно понял)
спасибо
0
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:54 #11
SergeyM, проверяется будет ли после сдвига на 1 бит последний бит 0. В целом тут проверяется на четность/нечетность dir[x][y]
0
Xorboo
7 / 7 / 0
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:56 #12
besstiaa, чет/нечет это же без сдвига вроде. А со сдвигом что-то для меня, увы, непонятное.
1
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
17.12.2010, 00:01 #13
Да точно. Ну сдвиг вправо - это вроде как деление на 2 в степени n, где n - число бит сдвига. В данном случае получается, что проверяется на четность/нечетность результат деления dir[x][y]/2
1
Aye Aye
369 / 283 / 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. Чета я проглядел, что такой ответ уже дали извиняюсь.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
17.12.2010, 03:58 #15
if срабатывает, если после деления числа из массива на два получилось чётное число
0
17.12.2010, 03:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 03:58
Привет! Вот еще темы с ответами:

скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? - C++
скажите пожалуйста, что означает здесь b. ,это какия-либо функция или что? //анализируем все клетки доски for(int i = 0; i < 8;...

Что такое #, include, что это означает - C++
______

[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; ...


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

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

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