Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg I. Khovayko                     2:5020/400     03 Mar 2003  18:49:30
 To : Michael Sedov
 Subject : Re: Операции над целыми числами.
 -------------------------------------------------------------------------------- 
 
 Michael Sedov wrote:
 
 >         Вопрос таков: какие более-менее полезные операции над целыми
 > числами можно выразить через побитовые логические and, or, xor, not.
 
 Hу много таких.... Вот дюжина примеров навскидку:
 0. Актеры:
   int x, y, mask;
   "**" - операция возведения в степень
 1. Взять остаток от деления числа на 2**n
 (то же самое - n младших битов):
    y = x & mаsk; где mask == 2**n - 1;
 2. Проверить, принадлежит ли число множеству 2**n:
   if((x & (x - 1)) { не принадлежит }
   else { принадлежит }
 3. Hайти наибольший делитель числа из множества 2**n
 (то же самое - взять младший бит числа):
    y = x & -x;
 4. Оптимизация (для некоторых платформ) 
    выражения if(x < 0 || y < 0):
   if((x|y) < 0)
 Аналогичные логические выражения для 
 
 >=0, >0, ==0 оставляю в качестве домашнего задания
 5. Проверить число на нечетность:
   if(x & 1) { нечетное }
   else { четное }
 Модификацию "делится на 2**n" 
 оставляю в качестве домашнего задания.
 6. Получить "выравнивание по четности в большую сторону" 
 - первое четное число, большее или равное x. То есть:
   x   y
 
   1   2
   2   2
   3   4
   4   4
   5   6
   6   6
 и так далее:
   y = (x + 1) & ~1;
 Опять таки: выражения для "в меньшую сторону",
 а также для выравнивания по другим степеням двойки
 оставляю в качестве домашнего задания.
 7. Оптимизация выражения "у чисел разный знак"
 if(x < 0 && y >= 0 || x >= 0 && y < 0):
   if((x ^ y) < 0) { знак разный }
   else { знак одинаковый }
 ******* Так. Про числа пока хватит. Переходим к буквам.  *******
 8. Сделать транслитерацию к маленьким буквам 
 (ASCII table or KOI-8), т.e. tr/A-Z/a-z/:
   y = x | ' ';
 
 9. Сделать транслитерацию к заглавным буквам 
 (ASCII table or KOI-8), т.e. tr/a-z/A-Z/:
   y = x & ~' ';
 
 10. Сделать транслитерацию РУС<->ЛАТ в кодировке KOI-8:
   y = x ^ 0240;
 
 11. Сравнить две буквы (ASCII table or KOI-8)
 без учета регистра (большие/маленькие):
   if((x ^ y) & ~' ') { буквы разные }
   else { буквы одинаковы }
 
 12. Для заданого символа получить код его "CTRL-символа".
 То есть для 'C' или 'c' это будет тройка:
   y = x & 037;
 Все, хватит. Прекращаю писать.
 Обещаная дюжина примеров уже набралась.
 
 Hадеюсь, этого достаточно для общего понимания
 идей "практического применения битовых операций".
 
 -- 
 #include <best/regards.hpp>
 Oleg I. KHOVAYKO  
 (301)435-5885 || WEB: http://olegh.spedia.net
 --- ifmail v.2.15dev5
  * Origin: National Center for Biotechnology Information (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Операции над целыми числами.   Michael Sedov   02 Mar 2003 00:54:24 
 Re: Операции над целыми числами.   Vitaly Lugovsky   02 Mar 2003 06:38:14 
 Re: Операции над целыми числами.   Igor Krassikov   02 Mar 2003 18:56:00 
 Re: Операции над целыми числами.   Igor Krassikov   02 Mar 2003 19:04:00 
 Re: Операции над целыми числами.   Vitaly Lugovsky   03 Mar 2003 08:43:55 
 Re^2: Операции над целыми числами.   Michael Sedov   02 Mar 2003 23:28:16 
 Операции над целыми числами.   Alex Cvetkov   03 Mar 2003 11:07:06 
 Операции над целыми числами.   Alex Cvetkov   03 Mar 2003 01:48:16 
 Опеpации над целыми числами.   Edik Ryzhov   04 Mar 2003 20:46:27 
 Re: Операции над целыми числами.   Alexander Kuklev   02 Mar 2003 03:11:47 
 Re^2: Операции над целыми числами.   Michael Sedov   02 Mar 2003 23:50:16 
 Операции над целыми числами.   Alex Cvetkov   03 Mar 2003 01:46:07 
 Re: Операции над целыми числами.   Alexander Kuklev   03 Mar 2003 02:04:46 
 Re: Операции над целыми числами.   Dmitriy Nesmachny   09 Mar 2003 10:42:13 
 Операции над целыми числами.   Ianos Gnatiuc   16 Mar 2003 12:13:17 
 Операции над целыми числами.   Dmitriy Nesmachny   19 Mar 2003 11:18:54 
 Операции над целыми числами.   Stan   03 Mar 2003 01:52:00 
 Re: Операции над целыми числами.   Oleg I. Khovayko   03 Mar 2003 18:49:30 
 Операции над целыми числами.   Alexey Kruglov   04 Mar 2003 16:54:43 
 Re: Операции над целыми числами.   Oleg I. Khovayko   05 Mar 2003 18:48:27 
 Операции над целыми числами.   Alex Astafiev   03 Mar 2003 05:23:16 
 Re: Операции над целыми числами.   Sergey Andrianov   03 Mar 2003 09:05:52 
 Re: Операции над целыми числами.   Vladimir Vassilevsky   05 Mar 2003 06:05:31 
 Операции над целыми числами.   Stanislav Shwartsman   05 Mar 2003 09:18:53 
 Операции над целыми числами.   Sasha Pelepeichenko   07 Mar 2003 13:41:53 
 Re: Операции над целыми числами.   Sergey Andrianov   09 Mar 2003 23:32:18 
Архивное /ru.algorithms/1152213cf1d22.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional