Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
1

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

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

Author24 — интернет-сервис помощи студентам
Изучая одну программу наткнулся на:

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

кого-нибудь знаетчто это такое?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2010, 23:25
Ответы с готовыми решениями:

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

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

подчеркивает запятую после 50, что это может быть?
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> #include...

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

19
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:32 2
Побитовые операции. Сдвиг вправо, побитовое И.
0
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:34  [ТС] 3
т.е. сдвиг вправо на 1 в массиве dir[x][y]?
0
94 / 94 / 14
Регистрация: 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
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:39  [ТС] 5
аааа понятно
а ! - это просто часть синтаксиса?
0
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:41 6
логическое отрицание
0
7 / 7 / 1
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:43 7
Кстати, вопрос, что собственно проверяет условие в первом посте? Кратно ли число 4-м?
0
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
7 / 7 / 1
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:49 9
SergeyM, нет, & это побитовое "И". Пример: 5&3 = 101 & 011 = 001 = 1;
Соответственно полученное в итоге (после >> и &) число будет сравниваться с нулем (свойство !(num), не знаю как объяснить)
1
0 / 0 / 0
Регистрация: 13.12.2010
Сообщений: 13
16.12.2010, 23:50  [ТС] 10
ну ладно примерно понял)
спасибо
0
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
16.12.2010, 23:54 11
SergeyM, проверяется будет ли после сдвига на 1 бит последний бит 0. В целом тут проверяется на четность/нечетность dir[x][y]
0
7 / 7 / 1
Регистрация: 16.12.2010
Сообщений: 23
16.12.2010, 23:56 12
besstiaa, чет/нечет это же без сдвига вроде. А со сдвигом что-то для меня, увы, непонятное.
1
94 / 94 / 14
Регистрация: 04.06.2010
Сообщений: 223
17.12.2010, 00:01 13
Да точно. Ну сдвиг вправо - это вроде как деление на 2 в степени n, где n - число бит сдвига. В данном случае получается, что проверяется на четность/нечетность результат деления dir[x][y]/2
1
373 / 287 / 97
Регистрация: 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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.12.2010, 03:58 15
if срабатывает, если после деления числа из массива на два получилось чётное число
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
17.12.2010, 13:03 16
Цитата Сообщение от SergeyM Посмотреть сообщение
C++
1
if (!(dir[x][y] >> 1 & 1))
на самом деле здесь таким извращенным способом проверяется условие:
C++
1
if(dir[x][y]^2);
человеку зачем то первый бит понадобился.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
17.12.2010, 14:14 17
Цитата Сообщение от Kastaneda Посмотреть сообщение
на самом деле здесь таким извращенным способом проверяется условие:
C
1
if(dir[x][y]^2);
нет, правильно accept сказал. Независимо от того, был ли младший бит установлен, или нет, после целочисленного деления на два от него ничего не останется. А вот частное от деления как-раз так на чётность и проверяется...
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,116
Записей в блоге: 2
17.12.2010, 16:44 18

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
А вот частное от деления как-раз так на чётность и проверяется...
Это как вариант, но нельзя не согласиться, что (!(dir[x][y] >> 1 & 1)) и (dir[x][y]^2) проверяют одно и то же условие, а именно - является ли первый бит нулем, только предложенная мною запись - это одна операция а у ТС три операции.



Добавлено через 15 минут
сорри, я тупанул, вместо (dir[x][y]^2) правильно будет (!(dir[x][y]&2))
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
17.12.2010, 16:52 19
Kastaneda, фигасе ты тупишь, не ожидал от тебя О_o
0
Kastaneda
17.12.2010, 16:57     Что это может значить???
  #20

Не по теме:

Цитата Сообщение от slice Посмотреть сообщение
Kastaneda, фигасе ты тупишь, не ожидал от тебя
да, что-то заклинило, что нужно 1ый бит отловить, в голову пришло (dir[x][y]^2), нужный бит конечно проверятся, только помимо этого остальные биты тоже ксорятся, а про это я как-то не подумал)))

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2010, 16:57

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

Что бы это могло значить?
При компиляции выдает следующее: Project Name.exe raised exception class EInvalidOperation with...

Что бы это могло значить?
Недавно решил на свой сайт поставить рекламу Гугла, адсенс. Насколько я понимаю, адсенс начинает...

График в Delphi, что это значить?
Я хочу чтобы количество значений какие я выбрал в ListBox нарисовали мне такое самое количество...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru