Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 17:09   #1
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию Побитовые операции в JS

Здравствуйте) Ох, помогите, пожалуйста, разобраться. В чем тут ошибка?

Даны два числа N>=0 и 0<=M<=31. С помощью побитовых операций определить, установлен или нет M-ый бит справа у числа N. Например:
N=13, M=1, Результат - "NO"
N=13, M=0, Результат - "YES"
N=15, M=5, Результат - "NO"
N=16, M=4, Результат - "YES"

В общем, надо переделать так, чтобы Yes выдавался только в том случае, если запрашиваемый бит = 1, а слева и справа от него 0 (010) в остальных случаях No. Я то думала, что if (1 и (не 0) и (не 0)) :
Код:
 if (((N >> M) & 1) && (~((N >> L) | 0)) && (~((N >> R) | 0))) alert('Yes');
else alert('No');
НО вот это выводит вообще не тру и не фолс, а отрицательные числа
Код:
if (~((N >> L) | 0)) alert(~((N >> L) | 0));
else alert('No');
я там лишние L и R ввела уже.. Изначально было просто M+1, M-1..

Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script>
var N = prompt("Введите N:", '');
var M = prompt("Введите M:", '');

N = parseInt(N); M= parseInt(M);

var L = M - 1;
L = parseInt(L);
var R = M + 1;
R = parseInt(R);
if (((N >> M) & 1) && (~((N >> L) | 0)) && (~((N >> R) | 0))) alert('Yes');
else alert('No');

//if (~((N >> L) | 0)) alert(~((N >> L) | 0));
//else alert('No');

</script>
</body>
</html>
Задачка то вроде простая. Просто поймите, пожалуйста, и не ругайтесь) Я только только начала изучать JS и как-то у меня с ним не ладится..((
Решетова Алена вне форума Ответить с цитированием
Старый 22.05.2013, 17:14   #2
Решетова Алена
Форумчанин
 
Регистрация: 13.12.2012
Сообщений: 116
По умолчанию

Блин, ребята( ахаха. поменяла знак && на & и заработало

Код:
if (((N >> M) & 1) & (~((N >> L) | 0)) & (~((N >> R) | 0))) alert('Yes');
else alert('No');
Решетова Алена вне форума Ответить с цитированием
Старый 22.05.2013, 17:35   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ахаха
Собственно эта хаха описана в любом учебнике )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С/С++, ПОБИТОВЫЕ ОПЕРАЦИИ. gopnikdj Помощь студентам 5 25.12.2012 18:29
Побитовые операции С++ Pein95 Общие вопросы C/C++ 3 19.11.2012 14:48
Си.Побитовые операции Alina111 Visual C++ 6 24.06.2012 20:53
Побитовые операции Unique Паскаль, Turbo Pascal, PascalABC.NET 3 29.08.2010 18:50
Побитовые операции С++ Defa4ka Помощь студентам 4 22.06.2010 14:55