Страница 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. что здесь проверяется?