Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Обработка битов


Автор: jsa 21.5.2007, 12:50
Hi All

есть целое число например 184, в двоичке 10111000, как проверить что 8 бит это еденица, а 7 - ноль, вообще не доганяю  smile  как сделать проверку  smile 

Автор: Metal_Heart 21.5.2007, 13:04
Такие элементарные вещи спрашивать  smile 
Код

void check8bit(byte bytes)
{
 boolean bitNumber8 = 0x80 & bytes;

 if(bitNumber8) System.out.println("8-ой бит установлен в 1");
  else System.out.println("8-ой бит установлен в 0");
}


Возможны синтаксические ошибки. Показал только идею, остальное - догадайся сам!

Автор: jsa 21.5.2007, 13:12
т.е. если мне нужно проверить 7 бит то нужно 
Код

 boolean bitNumber8 = 0x40 & bytes;

вроде так, но почему именно так? плз, разъясните теорию

Автор: Metal_Heart 21.5.2007, 14:35
2^0 = 1 (- 1 бит)
2^1 = 2 (- 2 бит)
...
2^6 = 40h (- 7 бит)
2^7 = 80h (- 8 бит)

см. на степень и + 1 к ней ..

Автор: nornad 21.5.2007, 14:48
Цитата(jsa @  21.5.2007,  16:12 Найти цитируемый пост)
плз, разъясните теорию

Почитай про битовую логику.

Автор: batigoal 21.5.2007, 17:25
Цитата(jsa @  21.5.2007,  14:12 Найти цитируемый пост)
вроде так, но почему именно так? плз, разъясните теорию 

Логика такая:

Исходное число: 156 (в десятичной) = 10011100 (в двоичной)

Допустим, мы хотим проверить седьмой бит. Тогда мы используем маску 01000000 (в шестнадцатеричной - 0x80). При использовании логической оперпации И, биты, пересекшиеся с 0, будут сброшены, а с 1 - оставлены неизмененными:

10011100 +
01000000 =
00000000 (или просто 0, т.е. false)

Для проверки пятого бита используем 00010000 (0х10):

10011100 +
00010000 =
00010000 (16, т.е. true)

Автор: jsa 22.5.2007, 03:54
batigoal, большое сенькс  smile , я протупил вообще, ведь нам преподовали булеву алгебру, совсем забыл 

Автор: olegrolik 22.5.2007, 09:11
Самый простой вариант (имхо) такой: Проверка бита (bit) в числе (value) на наличие единицы.
Код

void Check_Bit(unsigned int value, int bit) {
return(value&(1<<bit))>=1;

Автор: chief39 22.5.2007, 12:22
Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
unsigned int

В джаве такого нет



Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
void Check_Bit(

воид не очень вяжется с ретурном smile
Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
return(value&(1<<bit))>=1


Но мысль наглядная smile

Автор: olegrolik 22.5.2007, 13:52
Цитата(chief39 @ 22.5.2007,  12:22)
Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
unsigned int

В джаве такого нет



Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
void Check_Bit(

воид не очень вяжется с ретурном smile
Цитата(olegrolik @  22.5.2007,  09:11 Найти цитируемый пост)
return(value&(1<<bit))>=1


Но мысль наглядная smile

Да  smile . Прошу прощения.
Имелась ввиду конечно же мысль.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)