Показать сообщение отдельно
  #9 (permalink)  
Старый 16.03.2013, 17:50
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Все битовые операции (&, |, ^, ~, сдвиги) делают следующее:
1. Преобразуют операнд (в нашем случае строка) в число.
2. У полученного числа отбрасывают дробную часть, а от целой части оставляют только 32 младших бита, старшие отбрасывают.
3. С полученным числом делают указанную операцию.
4. Результат трактуется как 32-битное целое со знаком.
Желающие могут поэкспериментировать, для экспериментов взять числа два миллиарда (с ним все будет нормально), три миллиарда (а вот оно уже в 31 бит не помещается, а значит будет единичка в бите, который трактуется как знаковый), пять миллиардов (оно в 32 бита не влазит никак).
Наверно, лучше все-же пользоваться плюсом, битовые операции не только теряют дробную часть, но и делают ненужные действия, даже если сами по себе битовые операции быстрые, то преобразование числа из плавающего формата в целый и затем обратно - дополнительная потеря времени. Хотя сам ничего не замерял, так что рассуждения чисто теоретические :-)

Последний раз редактировалось rgl, 16.03.2013 в 17:55.
Ответить с цитированием