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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2012, 16:20   #1
LancX
Пользователь
 
Аватар для LancX
 
Регистрация: 30.04.2012
Сообщений: 52
По умолчанию Центральный элемент массива

Разбираюсь в "быстром поиске", наткнулся на интересный метод нахождения центрального элемента массива, кто может объяснить суть этой строки int p=ar[size-1>>1]; ? Код тестовый для интересующего меня вопроса, это не быстрый поиск=)
Код:
void main(){
	const int size=7;
	int ar[size]={5,4,3,2,8,9,1};

	for(int i=0;i<size;i++){
		cout<<ar[i]<<" ";
	}
	cout<<endl;

	int p=ar[size-1>>1];//центральный элемент
	cout<<p<<endl;
}
При любом расчете, число, правильность которого для всех очевидна, становится источником ошибок.
LancX вне форума Ответить с цитированием
Старый 23.06.2012, 16:54   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Код:
int p=ar[size-1>>1];//центральный элемент
Так понимаю, что размер массива уменьшается на единицу и результат сдвигается на один бит вправо (т.е. деление на 2). Таким образом получен номер элемента, который расположен в центре.
Переменной p присваивается значение найденного элемента.
Вычитание единицы связано с тем, что нумерация элементов массива ведется с нуля.
Проверьте для вашего случая


Как-то так получается ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.06.2012, 17:04   #3
LancX
Пользователь
 
Аватар для LancX
 
Регистрация: 30.04.2012
Сообщений: 52
По умолчанию

Я пока не силен в битовых операциях) ">>1" тоже что "/2" Ясно, Спс.
При любом расчете, число, правильность которого для всех очевидна, становится источником ошибок.
LancX вне форума Ответить с цитированием
Старый 23.06.2012, 17:15   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

И да, и нет.
Если сдвигаемое число положительное, то да, так и есть, а вот если оно отрицательное ...
Вот тут лучше почитать о представлении чисел в ЭВМ.
Там старший бит отрицательного числа равен 1 и этот бит, при сдвиге вправо, размножается.
Т.к. в нашем примере размер массива - число положительное, то да.
Сдвиг вправо - деление на 2.
В общем случае это не так.


Внимательность и еще раз внимательность ...
(Вот бы еще самому следовать этому совету )
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заменить элемент элемент одномерного массива? Паскаль Женька Good Помощь студентам 5 21.12.2011 00:07
Одномерный массив. Необходимо заменить последний положительный элемент на второй элемент массива кумитэ Паскаль, Turbo Pascal, PascalABC.NET 1 19.12.2011 16:44
Центральный угол! Не понятно условие! Hacker19_90 Помощь студентам 1 16.05.2011 19:54
Удалить элемент массива pavel42 Помощь студентам 14 21.05.2009 08:52
Максимальный элемент массива j_Q Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.11.2008 22:48