Из теста на Software Developer position
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
-
- Частый Гость
- Сообщения: 41
- Зарегистрирован: 14 май 2006, 00:00
- Откуда: Vancouver
Из теста на Software Developer position
Подскажите, 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
Вопрос из теста при приеме на работу.
Спасибо.
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
тест на понимание двоичного представления чисел и побитовых операций.
правильный ответ, по-моему - 2.
правильный ответ, по-моему - 2.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
Re: Из теста на Software Developer position
http://youtube.com/watch?v=91IBfCjuDYYLilia писал(а):Подскажите, 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
Вопрос из теста при приеме на работу.
Спасибо.
- Stanislav
- Mr. Minority Report
- Сообщения: 45386
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: Из теста на Software Developer position
обоснуй (с)Ranger писал(а):тест на понимание двоичного представления чисел и побитовых операций.
правильный ответ, по-моему - 2.
-
- Завсегдатай
- Сообщения: 412
- Зарегистрирован: 18 ноя 2007, 23:48
- Откуда: Vancouver
Re: Из теста на Software Developer position
Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
типа 00000100 & 00000011 = 00000000
- Stanislav
- Mr. Minority Report
- Сообщения: 45386
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Re: Из теста на Software Developer position
а если n = 0101011111100011?accnt5 писал(а):Если n & (n-1) дает 0, то в общем-то логично, что n есть степень 2.
типа 00000100 & 00000011 = 00000000
-
- Завсегдатай
- Сообщения: 412
- Зарегистрирован: 18 ноя 2007, 23:48
- Откуда: Vancouver
Re: Из теста на Software Developer position
Тогда n & (n-1) не даст 0.Stanislav писал(а):а если n = 0101011111100011?
- Garik
- Завсегдатай
- Сообщения: 480
- Зарегистрирован: 02 ноя 2006, 21:03
- Откуда: Киев->Торонто->куда глаза глядят
Re: Из теста на Software Developer position
наверное 1)
ffffffff == ffffffff & (fffffffe - 1)
ffffffe - 1 = ffffffff
ffffffff == ffffffff & (fffffffe - 1)
ffffffe - 1 = ffffffff
-
- Маньяк
- Сообщения: 2026
- Зарегистрирован: 13 мар 2007, 22:55
Re: Из теста на Software Developer position
если результат не нулевой, то будет положительным. Об отрицательном нужны дополнительные договоренности о представлении, а в условии говорится 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
..... дальше индукция.
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
..... дальше индукция.

- AlexANB
- Маньяк
- Сообщения: 2904
- Зарегистрирован: 17 фев 2003, 18:47
- Откуда: Ontario
Re: Из теста на Software Developer position
[quote="meser"]если результат не нулевой, то будет положительным. Об отрицательном нужны дополнительные договоренности о представлении, а в условии говорится 32 WORD.
......
0100 & 0011 = 0100 = 4 -- неверно
......
1000 & 0111 = 1000 = 8 -- неверно
......
0100 & 0011 = 0100 = 4 -- неверно
......
1000 & 0111 = 1000 = 8 -- неверно
-
- Маньяк
- Сообщения: 2026
- Зарегистрирован: 13 мар 2007, 22:55
Re: Из теста на Software Developer position
упс. старею 
спасибо.

спасибо.
-
- Завсегдатай
- Сообщения: 412
- Зарегистрирован: 18 ноя 2007, 23:48
- Откуда: Vancouver
Re: Из теста на Software Developer position
К чему это?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 и т.д. Поправьте если что не так...
-
- Завсегдатай
- Сообщения: 412
- Зарегистрирован: 18 ноя 2007, 23:48
- Откуда: Vancouver
Re: Из теста на Software Developer position
Вообще вопрос хитрый - n присваивается новое значение в процессе, так что правильнее наверное будет сказать, что правильный ответ #1, ибо как раз он выполним только при n=0
1. the most significant nibble of the word contains n set bits

1. the most significant nibble of the word contains n set bits
-
- Зритель
- Сообщения: 5
- Зарегистрирован: 27 июн 2008, 17:46
Re: Из теста на Software Developer position
Видно народ забыл как степень двойки в бинарном виде выглядит
Этот if как раз это и проверяет, а в n остаётся логарифм 2 от n.

Этот if как раз это и проверяет, а в n остаётся логарифм 2 от n.

- Garik
- Завсегдатай
- Сообщения: 480
- Зарегистрирован: 02 ноя 2006, 21:03
- Откуда: Киев->Торонто->куда глаза глядят
Re: Из теста на Software Developer position
да, про бинарный народ забыл - про шеснадцатиричный еще как-то помним. все-таки первое - ближе к телу.
п.с. про логарифмы не понял. log 2 n = ln n / ln 2 - равно нулю только при n=1. что здесь проверяется?
п.с. про логарифмы не понял. log 2 n = ln n / ln 2 - равно нулю только при n=1. что здесь проверяется?