Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.07.2010, 19:23
Новичок

Отправить личное сообщение для maxfisher Посмотреть профиль Найти все сообщения от maxfisher
 
Регистрация: 25.06.2009
Сообщений: 24

Тест бита 0 или 1
Почему моя програма работает по разному в зависимости от

if((n & 1<<bit)==0)

или

if((n & 1<<bit)!=1)

?
  #2  
Старый 06.07.2010, 22:52
Местный

Отправить личное сообщение для prografix Посмотреть профиль Найти все сообщения от prografix
 
Регистрация: 03.11.2006
Адрес: Москва
Сообщений: 167

Потому что выражение (n & 1<<bit) может принимать разные значения, а не только 0 или 1.
  #3  
Старый 07.07.2010, 09:50
Новичок

Отправить личное сообщение для maxfisher Посмотреть профиль Найти все сообщения от maxfisher
 
Регистрация: 25.06.2009
Сообщений: 24

Сообщение от prografix Посмотреть сообщение
Потому что выражение (n & 1<<bit) может принимать разные значения, а не только 0 или 1.
А какие именно? Где узнать об этом более подробно?

Я в своей програме устанавлюю определённый бит в 1, а потом тестирую какие биты не 0. Как это реализовать правильно?
  #4  
Старый 12.07.2010, 20:17
_persicum_

 
Сообщений: n/a

Я на пасе так тестирую

(a and (1 shl n)) <> 0 значит бит установлен и наоборот
Все должно работать у тя только не ручаюсь за приоритет операций поставь скобки на всякий пожарный и потом Си же силен тем что там == и <> нулю писать не нужно
  #5  
Старый 12.07.2010, 23:19
Местный

Отправить личное сообщение для prografix Посмотреть профиль Найти все сообщения от prografix
 
Регистрация: 03.11.2006
Адрес: Москва
Сообщений: 167

Сообщение от maxfisher Посмотреть сообщение
А какие именно? Где узнать об этом более подробно?
Элементарно.
если bit = 1 => (n & 1<<bit) = 1 или 0
если bit = 2 => (n & 1<<bit) = 2 или 0
если bit = 3 => (n & 1<<bit) = 4 или 0 и т.д.
  #6  
Старый 31.07.2010, 13:34
Аватар для pavlinux
Пользователь

Отправить личное сообщение для pavlinux Посмотреть профиль Найти все сообщения от pavlinux
 
Регистрация: 16.11.2008
Сообщений: 93

Код:
int main(void) {
int I=0b111101111
,i;for(i=8;i>=0;
i--){write(1, (((
I & (1 << i))>> i
) ? "1":"0"),1);}
write(1,"\n", 1);
return 0;}

Последний раз редактировалось pavlinux, 31.07.2010 в 14:37.
  #7  
Старый 05.10.2010, 08:56
Аватар для Vertex
Новичок

Отправить личное сообщение для Vertex Посмотреть профиль Найти все сообщения от Vertex
 
Регистрация: 22.06.2008
Адрес: Узбекистан, Ташкент
Сообщений: 22

Сообщение от maxfisher Посмотреть сообщение
Почему моя програма работает по разному в зависимости от

if((n & 1<<bit)==0)

или

if((n & 1<<bit)!=1)

?
n & 1<<bit ничем не отличается от n&1 << bit или n&1<<bit.
Используйте скобки
  #8  
Старый 05.10.2010, 22:10
_persicum_

 
Сообщений: n/a

скобки тут не причем, просто нужно все время сравнивать с 0, с единицей неправильно сравнивать.
  #9  
Старый 05.10.2010, 23:57
гость

 
Сообщений: n/a

Сообщение от _persicum_ Посмотреть сообщение
скобки тут не причем
а ты наизусть выучил таблицу приоритетов операторов в c?

Цитата:
просто нужно все время сравнивать с 0, с единицей неправильно сравнивать.
еще лучще ваще не сравнивать

if (x&(1<<x))
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тест простоты Рабина РСАйзер Криптография 4 06.04.2008 12:29
Тест для АВЛ-дерева Straight Реализация, исходники, языки 0 18.10.2007 21:26
тест простоты Рабина гость Математические алгоритмы (другое) 2 26.09.2007 19:27