blackbit (22.04.2008 13:58, просмотров: 93) ответил blackbit на ..да полно, сделай бегущую единицу на масках и не парься. Будет просто, дешево и мощно.
..типа так: объявляешь десять масок (по числу анализируемых позиций бита)
#define maska1 0x0001 // b''0000 0000 0000 0001'
#define maska2 0x0002 // b''0000 0000 0000 0010'
#define maska3 0x0004 // b''0000 0000 0000 0100'
...
а потом в фунции накладываем последовательно маску на число, пока единица не наткнется на первую не равную 0 позицию, ее и выводим по return:
unsigned char fun(unsigned int var);
{
if(maska1 & var) return 0;
if(maska2 & var) return 1;
if(maska3 & var) return 2;
//... число строк if равно числу исследуемых позиций
}
Короче, всё на предикатах, чистейший Пролог.. ;) И никаких наворотов типа Hacker's Delight. %)