LINUX.ORG.RU

Как бы вы реализовали аналог bit flags на архитектуре без поддержки целых чисел, и без поддержки стандартных битовых инструкций?

 


0

2

Числа представлены в float. Битовый сдвиг отсутствует. Нужна не сам bit flags, а что нибудь альтернативное, что было бы эффективно на такой платформе.

Ситуация вымышленная, воспринимайте как головоломку.

★★★★★

Последнее исправление: MOPKOBKA (всего исправлений: 4)
Ответ на: комментарий от MOPKOBKA

у тяж компухтер если лень алгебру расчехлять сделай брут форс перебор - али какую нейронку :)

по факту у тебя есть таблица входов и нужных выходов вот скажем на младших 2 битах ( для простоты очистим входа посредством %4)

x y x&y 0 0 0 0 1 0 0 2 0 0 3 0 1 0 0 1 1 1 1 2 0 1 3 1 2 0 0 2 1 0 2 2 2 2 3 2 3 0 0 3 1 1 3 2 2 3 3 3

хм самый простой вариант разнести так далеко что бы

(x1B+x0)*(y1B+y0)=x1*y1BB+(x1*y0+y1*x1)B+x0*y0

т.е в этом случае у тя не все биты для флагов используются зато проще логику

например если бит флага реально занимает 3 бита тогда

(x1x0)&&(y1y0)==

z=x*y

x0y0 это z%2

x1y1 это z//64

и да отдельная радость нормализация вот этого всего и оценка когда необходимо нормализовать промежуточные

а вообще если скорость не критична лучше по битово разбирать собирать - и вынести всё в отдельную либу

qulinxao3 ★★
()
Ответ на: комментарий от MOPKOBKA

Для or возможно проще - основная идея упрощающая арифметику - разнести реальные биты на многобитные позиции - тогда обычная арифметика будет без переносов - тогда типо можно организовать типо паралельную логику на обычной арифметике

но для этого опят же нужно переодически нормализовать = т.е забивать нолями возникшие паразитные значения

ваще вот эти вот преседания - были модны на заре cs в 50-60ых можно щя в инете в том же acm communications найти много публикаций на похожие темы

вот как пример - как найти полное число лет между двумя календарными датами

на входе скажем даты в виде строк YYYYMMDD

так вот если мы в big-ендиан - можно просто вычесть эти datum как восмибайтовые целые -

bsd арифметика оттудаже

qulinxao3 ★★
()