Страница 1 из 2
Из теста на Software Developer position
Добавлено: 18 июн 2008, 22:22
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
Вопрос из теста при приеме на работу.
Спасибо.
Re: Из теста на Software Developer position
Добавлено: 18 июн 2008, 22:53
Ranger
тест на понимание двоичного представления чисел и побитовых операций.
правильный ответ, по-моему - 2.
Re: Из теста на Software Developer position
Добавлено: 19 июн 2008, 00:15
папа Карло
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
Re: Из теста на Software Developer position
Добавлено: 19 июн 2008, 09:55
Stanislav
Ranger писал(а):тест на понимание двоичного представления чисел и побитовых операций.
правильный ответ, по-моему - 2.
обоснуй (с)
Re: Из теста на Software Developer position
Добавлено: 19 июн 2008, 12:39
accnt5
Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
Re: Из теста на Software Developer position
Добавлено: 19 июн 2008, 20:14
Stanislav
accnt5 писал(а):Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
а если n = 0101011111100011?
Re: Из теста на Software Developer position
Добавлено: 20 июн 2008, 08:53
accnt5
Stanislav писал(а):а если n = 0101011111100011?
Тогда n & (n-1) не даст 0.
Re: Из теста на Software Developer position
Добавлено: 20 июн 2008, 15:05
Garik
наверное 1)
ffffffff == ffffffff & (fffffffe - 1)
ffffffe - 1 = ffffffff
Re: Из теста на Software Developer position
Добавлено: 20 июн 2008, 20:37
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
..... дальше индукция.

Re: Из теста на Software Developer position
Добавлено: 20 июн 2008, 20:58
AlexANB
[quote="meser"]если результат не нулевой, то будет положительным. Об отрицательном нужны дополнительные договоренности о представлении, а в условии говорится 32 WORD.
......
0100 & 0011 = 0100 = 4 -- неверно
......
1000 & 0111 = 1000 = 8 -- неверно
Re: Из теста на Software Developer position
Добавлено: 20 июн 2008, 21:05
meser
упс. старею

спасибо.
Re: Из теста на Software Developer position
Добавлено: 21 июн 2008, 03:16
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
..... дальше индукция.

К чему это?
(!(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 и т.д. Поправьте если что не так...
Re: Из теста на Software Developer position
Добавлено: 21 июн 2008, 03:53
accnt5
Вообще вопрос хитрый - n присваивается новое значение в процессе, так что правильнее наверное будет сказать, что правильный ответ #1, ибо как раз он выполним только при n=0
1. the most significant nibble of the word contains n set bits
Re: Из теста на Software Developer position
Добавлено: 27 июн 2008, 20:38
Berserk
Видно народ забыл как степень двойки в бинарном виде выглядит
Этот if как раз это и проверяет, а в n остаётся логарифм 2 от n.

Re: Из теста на Software Developer position
Добавлено: 28 июн 2008, 02:12
Garik
да, про бинарный народ забыл - про шеснадцатиричный еще как-то помним. все-таки первое - ближе к телу.
п.с. про логарифмы не понял. log 2 n = ln n / ln 2 - равно нулю только при n=1. что здесь проверяется?