powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
25 сообщений из 127, страница 2 из 6
Битовые значения
    #39607348
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.02.2018 15:23, WildSery пишет:
> Человеку нужно кларион отфайрбёрдить

хорошее выражение.
ёмкое!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607394
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем кто откликнулся.
Что-то начинает вырисовываться.
Например если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).

Если мне надо прочитать 4 бита, начиная с 5 позиции, я должен сместиться на 4 бита bin_shr(relat,4), а затем прочитать значение следующих 4 бит: bin_and(...,0x0f).

Если я ошибаюсь - поправьте меня.
Но на том примере, где мне это надо было,
проверив контрольные значения, получается все правильно.
...
Рейтинг: 0 / 0
Битовые значения
    #39607402
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Краткость - сестра, да.

akrush,
авторЯ нашел ее и читал. Но не понял как :(
Помогите примером пожалуйста

авторЕсли я ошибаюсь - поправьте меня.

Читай азы - битовые операции (прямо вот так можешь и вбивать в гугл). Не нужно никуда ничего двигать. Материала в сети, я думаю, вагон и тележка. И с картинками и с описанием. И даже видео.
...
Рейтинг: 0 / 0
Битовые значения
    #39607408
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Всё верно.
...
Рейтинг: 0 / 0
Битовые значения
    #39607413
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Вот так попробуй. Твоё число Value. Если bin_and (Value, 1) возвращает не ноль, то первый (нулевой) бит 1. Если bin_and (Value, 2) возвращает не ноль, то второй бит 1. Если bin_and (Value, 4) возвращает не ноль, то третий бит 1. Если bin_and (Value, 8) возвращает не ноль, то четвёртый бит 1. И т.д. На каждое восьмибитовое число нужно восемь раз наложить маску типа "00001000". Битовая операция "И" возвращает единицу, если оба числа с единицей (в смысле бита).
...
Рейтинг: 0 / 0
Битовые значения
    #39607476
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,
спасибо, но я так понимаю это больше подходит если мне надо сравнивать.
а мне надо просто расписать все биты по столбцам и потом я от битовых полей хочу избавится.
...
Рейтинг: 0 / 0
Битовые значения
    #39607551
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush> а мне надо просто расписать все биты по столбцам и потом я от битовых полей хочу избавится.

Ну так и расписывай.

firebird_smart_field_bit_1 = bin_and(clarion_shit_field, 1);
firebird_smart_field_bit_2 = bin_and(clarion_shit_field, 2);
firebird_smart_field_bit_3 = bin_and(clarion_shit_field, 4);
firebird_smart_field_bit_4 = bin_and(clarion_shit_field, 8);
...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607612
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushНапример если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).Во-первых, смещать вправо надо не на 5, а на 4, а во вторых - занафига? Тебе его надо проверить как флаг, а не превратить в числовое значение все биты слева, включая пятый. Выставленному в единицу пятому биту соответствует десятичное число 32 (см. таблицу) или шестнадцатеричное 0x10. Всё проще!
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32), TRUE, FALSE)
...
Рейтинг: 0 / 0
Битовые значения
    #39607613
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryrdb_devкакой бит машинного слова какому десятичному числу соответствуетДля битовой маски бесполезные знания.Что, как не битовую маску в десятичном представлении, я использовал сообщением выше?
...
Рейтинг: 0 / 0
Битовые значения
    #39607614
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devakrushНапример если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).Во-первых, смещать вправо надо не на 5, а на 4, а во вторых - занафига? Тебе его надо проверить как флаг, а не превратить в числовое значение все биты слева, включая пятый. Выставленному в единицу пятому биту соответствует десятичное число 32 (см. таблицу) или шестнадцатеричное 0x10. Всё проще!
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32), TRUE, FALSE)

Мипардон! СИшная привычка не писать в операторе условия "> 0"...
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32) > 0, TRUE, FALSE)
...
Рейтинг: 0 / 0
Битовые значения
    #39607617
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВо-первых, смещать вправо надо не на 5, а на 4Чот я совсем зарапортавался... На 5!
...
Рейтинг: 0 / 0
Битовые значения
    #39607620
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devили шестнадцатеричное 0x10 Как же неподецки может плющить с утра...
0x20, конечно же!
...
Рейтинг: 0 / 0
Битовые значения
    #39607628
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предварительный просмотр и перечитать.
После каждой правки и с небольшим интервалом.

P.S. Была с старом "Вокруг света" небольшая заметка о селькупах (северная народность).
Называлась "Жду стою".
Сбор в дорогу занимал два-три дня и несколько часов перед выездом полностью готовый путешественник просто сидел на нартах.
Зачем?Жду, стою. Может я что забыл, может кому другому что понадобится.
...
Рейтинг: 0 / 0
Битовые значения
    #39607638
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЧто, как не битовую маску в десятичном представлении, я использовал сообщением выше?Я о том и говорю, что ты один такой здесь.
Если нужно найти N-ный бит, нормальные люди его формулой находят 2^(N-1), ну или битовым сдвигом bin_shr, а не по табличке пальцем ищут.

У тебя, наверное, и в коде написано что-то вроде (для наглядности) ?
Код: sql
1.
2.
3.
4.
5.
case bit_number of
  when 1 then bit_and(NoPay, 1)
...
  when 5 then bit_and(NoPay, 16)
...
...
Рейтинг: 0 / 0
Битовые значения
    #39607663
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, я нифига не понимаю. Какой еще "bit_number"? Если выставлено, скажем, три первых бита, надо в кейсе описать все 8 вариантов комбинаций?
...
Рейтинг: 0 / 0
Битовые значения
    #39607680
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryУ тебя, наверное, и в коде написано что-то вроде (для наглядности) ?
Код: sql
1.
2.
3.
4.
5.
case bit_number of
  when 1 then bit_and(NoPay, 1)
...
  when 5 then bit_and(NoPay, 16)
...

А, я понял - "bit_number", это счетчик сдвигов и для каждого сдвига ты предлагаешь описать условие в кейсе? Тогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    shift = bit_SHR(shift, 1);
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    bit_number = bit_number + 1;
  END


Не многовато ли писанины? Куда проще:
Код: sql
1.
2.
3.
4.
5.
6.
7.
flag_bit0 = Iif(bit_AND(NoPay, 1) > 0, 1, 0);
flag_bit1 = Iif(bit_AND(NoPay, 2) > 0, 1, 0);
flag_bit2 = Iif(bit_AND(NoPay, 4) > 0, 1, 0);
flag_bit3 = Iif(bit_AND(NoPay, 8) > 0, 1, 0);
flag_bit4 = Iif(bit_AND(NoPay, 16) > 0, 1, 0);
flag_bit5 = Iif(bit_AND(NoPay, 32) > 0, 1, 0);
<и т.д.>
...
Рейтинг: 0 / 0
Битовые значения
    #39607708
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot rdb_dev]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    shift = bit_SHR(shift, 1);
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    bit_number = bit_number + 1;
  END


Так!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    shift = bit_SHR(shift, 1);
    bit_number = bit_number + 1;
  END
...
Рейтинг: 0 / 0
Битовые значения
    #39607710
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, так и у нас "посидим на дорожку" не спроста! :)
...
Рейтинг: 0 / 0
Битовые значения
    #39607727
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо bin_and уже пошёл bit_and. Чем дальше в лес...
...
Рейтинг: 0 / 0
Битовые значения
    #39607753
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIВместо bin_and уже пошёл bit_and. Чем дальше в лес... Да, капец ваще! Не приведи Господь вам такую работёнку, как у меня сейчас... Полный [ЦЕНЗУРА]!
...
Рейтинг: 0 / 0
Битовые значения
    #39607847
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devТогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:Ну то есть ты признаёшь, что твоя "таблица десятичных значений" в реальной жизни не применима?
...
Рейтинг: 0 / 0
Битовые значения
    #39607874
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryrdb_devТогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:Ну то есть ты признаёшь, что твоя "таблица десятичных значений" в реальной жизни не применима?А это, по твоему что, как не та же самая связка "номер разряда"<=>"десятичное значение"?
Код: sql
1.
2.
3.
4.
5.
6.
7.
flag_bit0 = Iif(bin_AND(NoPay, 1) > 0, 1, 0);
flag_bit1 = Iif(bin_AND(NoPay, 2) > 0, 1, 0);
flag_bit2 = Iif(bin_AND(NoPay, 4) > 0, 1, 0);
flag_bit3 = Iif(bin_AND(NoPay, 8) > 0, 1, 0);
flag_bit4 = Iif(bin_AND(NoPay, 16) > 0, 1, 0);
flag_bit5 = Iif(bin_AND(NoPay, 32) > 0, 1, 0);
<и т.д.>
...
Рейтинг: 0 / 0
Битовые значения
    #39607936
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, лучше бы поправил мою потенциальную ошибку, которая может всплыть при установленном в smallint самом старшем бите (при отрицательных числах), помятуя про конвертацию smallint в bigint.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
flag_bit0 = Iif(bin_AND(NoPay, 1) != 0, 1, 0);
flag_bit1 = Iif(bin_AND(NoPay, 2) != 0, 1, 0);
flag_bit2 = Iif(bin_AND(NoPay, 4) != 0, 1, 0);
flag_bit3 = Iif(bin_AND(NoPay, 8) != 0, 1, 0);
flag_bit4 = Iif(bin_AND(NoPay, 16) != 0, 1, 0);
flag_bit5 = Iif(bin_AND(NoPay, 32) != 0, 1, 0);
.
.
.
flag_bit15 = Iif(bin_AND(NoPay, 0x8000000000000000) != 0, 1, 0);
...
Рейтинг: 0 / 0
Битовые значения
    #39608927
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Ты тут дурочку валяешь, а мне ещё и поправлять? Ты знаешь, куда.
...
Рейтинг: 0 / 0
Битовые значения
    #39609087
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, не всёж банхаммером махать!
...
Рейтинг: 0 / 0
25 сообщений из 127, страница 2 из 6
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]