Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
Добрый день. Подскажите, пожалуйста, кто хорошо владеет побитовыми операциями. Требуется написать функцию, которая бы возвращала .Т., если в двоичном представлении числа нули содержаться только в младших разрядах, в противном случае .F. Например: 1111110000 .Т. 1111110001 .F. 1011111111 .F. 1000000000 .T. Можно написать "в лоб" с помощью BITTEST(), но нет ли способа попроще? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 12:34 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
func isbit lpara lnNumber return mod(lnNumber,2)=0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 12:50 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
Crip Сорри, мои примеры были неполные, проверки на четность недостаточно. 110011001 .F. и 110011000 .F. тоже Нули должны занимать только младшие разряды, после появления первой 1 в старших разрядах могут быть только 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 13:13 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
Если двоичное представление числа уже сформировано, то можно в полученной строке поискать строку "01". Если найдено, то возвращаем .F. IF AT("01",m.lcBitString)=0 RETURN .T. ELSE RETURN .F. ENDIF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 13:37 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
вроде того Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 15:24 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
* iNum - целое число * iWidth - фактическая разрядность числа Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Осталось только определиться с граничными условиями, я принял. что при 0 (все нули) и -1 (все единицы) возвращяется истина. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 16:44 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Двоичное представление числа оказалось не так-то просто (для меня)получить. Функция BINTOC дает 4-х байтовое представление, в котором подстроку "01" еще не поищешь. И, кроме того, BINTOC работает до 2,147,483,647 (естественно, раз 4 байта), а мне надо до 4,294,967,295 (десятичное представление максимального IP-адреса). Crip К счастью, функции BITTEST и BITRSHIFT работают в нужном диапазоне. Проверил на нескольких небольших числах ваш алгоритм - работает. Есть только 2 момента 1.В случае если в двоичном представлении все 1, то тоже .T. Поэтому Код: plaintext 1. 2. заменил на Код: plaintext 1. 2. 2.Алгоритм зацикливался при lnNumber=1 Окончательный вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. xAndy А как получить фактическую разрядность числа? Если кроме как функцией BINTOC нельзя, то она не устраивает меня по диапазону значений. Извиняюсь, что сразу не оговорил диапазон. Всем спасибо. Вариант от Crip вполне устроил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 17:20 |
|
||
|
Как определить, что в двоичном представлении числа 0 только в младших разрядах
|
|||
|---|---|---|---|
|
#18+
Если разрядность нужна всегда 32 бита, то вот простой вариант, работает в диапазоне unsigned long int - от 0 до FFFFFFFFh (4294967295) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2004, 18:32 |
|
||
|
|

start [/forum/topic.php?fid=41&gotonew=1&tid=1596950]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 374ms |

| 0 / 0 |
