Двоичная система

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Двоичная система

Сообщение v-adix » 06.06.2006 (Вт) 13:36

Привет!
Имеется два положительных числа A и B (Integer), которые могуг принимать значения от 0 до 15. И имеется переменная Result типа Byte. Нужно эти 2 числа А и B сохранить в переменной типа Byte.
Вот как вытащить из Byte-а 2 числа я вроде додумался (если неверно, поправьте плз):
B = Result & 16;
A = (Result & 240) / 16;
А как вот запихнуть 2 числа в Байт не могу додуматься!
ЗЫ Сорри мож я немного ошибся форумом... Просто подходящего форума не нашел чтоб такой вопрос задать...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 13:39

А ты в хекс маски переведи. Сразу очень просто станет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.06.2006 (Вт) 13:53

В байт:
bt = a * &HF + b
Из него:
b = ((bt Or &HF0) Xor &HF0)
a = ((bt - b) / &HF)
Изображение

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 06.06.2006 (Вт) 13:55

Ну если в хекс там понятно 0x[число А][число B]
Но так у меня ж Интегеры!

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 06.06.2006 (Вт) 13:55

Ок щас попробую :)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 06.06.2006 (Вт) 13:59

keks-n
Не работает твой пример :(

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.06.2006 (Вт) 14:00

Пардон, ошибся:
В байт:
bt = a * 16 + b
Из него:
b = ((bt Or &HF0) Xor &HF0)
a = ((bt - b) / 16)

А поскольку целые числа от 0 до 15-тип данных роли не играет.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.06.2006 (Вт) 14:01

b = ((bt Or &HF0) Xor &HF0)

А не проще bt And &h0F?

a = ((bt - b) / &HF)

А не проще bt \ &h10?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 06.06.2006 (Вт) 14:02

Кулл, пашет!
Спасибо :)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 06.06.2006 (Вт) 14:03

GSerg
Проще, так сделаю :) Спасибо :)

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:08

Народ, а вот допустим у меня массив типа int, в котором хранится изображение (1 элемент массива = 1 точка изображения). Хранится в формате ARGB, в таком виде:

Код: Выделить всё
00000000     11111111    00000000    11111111
A (alpha)    R (red)    G (green)  B (blue)

мне нужно вытащить оттуда составляющую A. как сделать? подскажите!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.06.2006 (Ср) 14:11

А вот это в поиск...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:15

В поиске только по RGB нашел :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.06.2006 (Ср) 14:20

А этого не достаточно? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:22

Ну там 3 а у меня 4 составляющие :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.06.2006 (Ср) 14:23

А глядя на принцип получения трёх, ты четвёртую не можешь понять? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:24

Вот в том то и проблема
не понимаю как это работает :( Был бы рад если б кто нибудь не только конкретное решение дал, но и разьяснил что и как!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 14:33

Hex(RGB(255,255,255) = &hFFFFFF
Hex(ARGB(0,255,255,255) = &h00FFFFFF

следовательно Mid поможет тебы вытащить две нужные буквы хекс формата. а перевести их в Integer труда не составит
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.06.2006 (Ср) 14:34

Хакер
За этот совет можно банить.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:36

Хакер
&h00FFFFFF во первых это не строка
а во вторых, медленно

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 14:37

GSerg, что на так? :evil:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 14:40

v-adix писал(а):Хакер
&h00FFFFFF во первых это не строка

Да ну, блин :twisted: :twisted: :twisted:
А что у нас функция Hex вернёт если её RGB(255,255,255) скормить???

а во вторых, медленно

И что тут медленного. Hex иди Mid$ или может быть тебе писать это всё медленно :twisted:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:45

Не знаю что вернет :) Я вообще не на VB Это пишу :) Меня интересует как сделать это работая с числами а не через Хекс, Мекс или хз что :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.06.2006 (Ср) 14:46

Хакер, в третьих, это неправильно и глупо. Неправильно, потому что Hex ведущие нули не возвращает. Глупо, потому что глупо преобразовывать число в строку затем, чтобы из нее снова получить число.
Lasciate ogni speranza, voi ch'entrate.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 14:48

Ну даже если так можно, какая будет скорость работы! Для меня каждая мс на счету
ну кто нибудь подскажите как это сделать работая с числами?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.06.2006 (Ср) 14:50

v-adix, чтобы получить отдельные биты из числа, ты используешь логические операции (например, RGB And &h0000FF00). Для того, чтобы сместить биты вверх или вниз на нужное число разрядов, ты умножаешь или делишь на степени двойки (например, (RGB And &h0000FF00) \ &h000000FF).
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.06.2006 (Ср) 14:50

ну тогда юзай or, and, xor, not и прочую гадость
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 15:03

Значит, если надо отсюда:
10101011 10101000
вытащить первые 8 бит (10101011), то я:
1. [исходное число] AND 11111111 00000000
получаю: 10101011 00000000
2. полученное делю на 10000000
и получаю 10101011 :)
теперь всё ясно !!! спасибо !!
ну тогда юзай or, and, xor, not и прочую гадость

Если чего то не понимаешь, лучше попроси помощи у других как это делаю я :)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.06.2006 (Ср) 15:08

2. Делишь не на 10000000, а на 100000000. Я в примере чуть неправильно написал, надо так: (RGB And &h0000FF00) \ &h00000100
Lasciate ogni speranza, voi ch'entrate.

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 21.06.2006 (Ср) 15:24

Окей, ясно, спасибо!

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 61

    TopList