Из теста на Software Developer position

Поиск и предложения по работе.
Lilia
Частый Гость
Сообщения: 41
Зарегистрирован: 14 май 2006, 00:00
Откуда: Vancouver

Из теста на Software Developer position

Сообщение Lilia »

Подскажите, please, что бы это значило:

Let n be a 32 bit word. Expression if (! (n&=(n-1))) determines if:

1. the most significant nibble of the word contains n set bits
2. n is a power of 2
3. n is a positive integer

Вопрос из теста при приеме на работу.
Спасибо.
Аватара пользователя
Ranger
Маньяк
Сообщения: 1199
Зарегистрирован: 22 окт 2003, 18:28
Откуда: 2:5025 -> Burnaby

Re: Из теста на Software Developer position

Сообщение Ranger »

тест на понимание двоичного представления чисел и побитовых операций.

правильный ответ, по-моему - 2.
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: Из теста на Software Developer position

Сообщение папа Карло »

Lilia писал(а):Подскажите, please, что бы это значило:

Let n be a 32 bit word. Expression if (! (n&=(n-1))) determines if:

1. the most significant nibble of the word contains n set bits
2. n is a power of 2
3. n is a positive integer

Вопрос из теста при приеме на работу.
Спасибо.
http://youtube.com/watch?v=91IBfCjuDYY
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45386
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Из теста на Software Developer position

Сообщение Stanislav »

Ranger писал(а):тест на понимание двоичного представления чисел и побитовых операций.
правильный ответ, по-моему - 2.
обоснуй (с)
accnt5
Завсегдатай
Сообщения: 412
Зарегистрирован: 18 ноя 2007, 23:48
Откуда: Vancouver

Re: Из теста на Software Developer position

Сообщение accnt5 »

Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
Аватара пользователя
Stanislav
Mr. Minority Report
Сообщения: 45386
Зарегистрирован: 19 окт 2005, 16:33
Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo

Re: Из теста на Software Developer position

Сообщение Stanislav »

accnt5 писал(а):Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
а если n = 0101011111100011?
accnt5
Завсегдатай
Сообщения: 412
Зарегистрирован: 18 ноя 2007, 23:48
Откуда: Vancouver

Re: Из теста на Software Developer position

Сообщение accnt5 »

Stanislav писал(а):а если n = 0101011111100011?
Тогда n & (n-1) не даст 0.
Аватара пользователя
Garik
Завсегдатай
Сообщения: 480
Зарегистрирован: 02 ноя 2006, 21:03
Откуда: Киев->Торонто->куда глаза глядят

Re: Из теста на Software Developer position

Сообщение Garik »

наверное 1)

ffffffff == ffffffff & (fffffffe - 1)
ffffffe - 1 = ffffffff
meser
Маньяк
Сообщения: 2026
Зарегистрирован: 13 мар 2007, 22:55

Re: Из теста на Software Developer position

Сообщение meser »

если результат не нулевой, то будет положительным. Об отрицательном нужны дополнительные договоренности о представлении, а в условии говорится 32 WORD.

0001 & 0000 = 0000
0010 & 0001 = 0000
0011 & 0010 = 0010 = 2
0100 & 0011 = 0100 = 4
0101 & 0100 = 0100 = 4
0110 & 0101 = 0100 = 4
0111 & 0110 = 0110 = 6 -> не является степенью 2
1000 & 0111 = 1000 = 8
1001 & 1000 = 1000 = 8
1010 & 1001 = 1000 = 8
1011 & 1010 = 1000 = 8
1100 & 1011 = 1000 = 8
1101 & 1100 = 1100 = 12 - не является степенью 2
1110 & 1101 = 1100 = 12
1111 & 1110 = 1110 = 14 - не является степенью 2
..... дальше индукция. :D
Аватара пользователя
AlexANB
Маньяк
Сообщения: 2904
Зарегистрирован: 17 фев 2003, 18:47
Откуда: Ontario

Re: Из теста на Software Developer position

Сообщение AlexANB »

[quote="meser"]если результат не нулевой, то будет положительным. Об отрицательном нужны дополнительные договоренности о представлении, а в условии говорится 32 WORD.

......
0100 & 0011 = 0100 = 4 -- неверно
......
1000 & 0111 = 1000 = 8 -- неверно
meser
Маньяк
Сообщения: 2026
Зарегистрирован: 13 мар 2007, 22:55

Re: Из теста на Software Developer position

Сообщение meser »

упс. старею :-)
спасибо.
accnt5
Завсегдатай
Сообщения: 412
Зарегистрирован: 18 ноя 2007, 23:48
Откуда: Vancouver

Re: Из теста на Software Developer position

Сообщение accnt5 »

meser писал(а): 0110 & 0101 = 0100 = 4
0111 & 0110 = 0110 = 6 -> не является степенью 2
1000 & 0111 = 1000 = 8
1001 & 1000 = 1000 = 8
1010 & 1001 = 1000 = 8
1011 & 1010 = 1000 = 8
1100 & 1011 = 1000 = 8
1101 & 1100 = 1100 = 12 - не является степенью 2
1110 & 1101 = 1100 = 12
1111 & 1110 = 1110 = 14 - не является степенью 2
..... дальше индукция. :D
К чему это? :roll:
(!(n&=(n-1))) должно давать TRUE, n&=(n-1) должно давать FALSE, т.е. n&(n-1)=0. Это выполнимо только когда исходное n is a power of 2.
0010 & 0001 = 0, 0100 & 0011 = 0, 1000 & 0111 = 0 и т.д. Поправьте если что не так...
accnt5
Завсегдатай
Сообщения: 412
Зарегистрирован: 18 ноя 2007, 23:48
Откуда: Vancouver

Re: Из теста на Software Developer position

Сообщение accnt5 »

Вообще вопрос хитрый - n присваивается новое значение в процессе, так что правильнее наверное будет сказать, что правильный ответ #1, ибо как раз он выполним только при n=0 :mrgreen:
1. the most significant nibble of the word contains n set bits
Berserk
Зритель
Сообщения: 5
Зарегистрирован: 27 июн 2008, 17:46

Re: Из теста на Software Developer position

Сообщение Berserk »

Видно народ забыл как степень двойки в бинарном виде выглядит :what!?:
Этот if как раз это и проверяет, а в n остаётся логарифм 2 от n. :mrgreen2:
Аватара пользователя
Garik
Завсегдатай
Сообщения: 480
Зарегистрирован: 02 ноя 2006, 21:03
Откуда: Киев->Торонто->куда глаза глядят

Re: Из теста на Software Developer position

Сообщение Garik »

да, про бинарный народ забыл - про шеснадцатиричный еще как-то помним. все-таки первое - ближе к телу.

п.с. про логарифмы не понял. log 2 n = ln n / ln 2 - равно нулю только при n=1. что здесь проверяется?
Ответить