Старый 14.06.2007, 11:03   #1   
Пришелец
 
Аватар для Skech
 
Сообщений: 992
Регистрация: 22.01.2004
Возраст: 39

Skech вне форума Не в сети
Побитовое чтение на С++

Дано: переменная типа int, (максимальное значение 255 это для справки)
Надо: Взять по очереди каждий бит и посмотреть 0 или 1

Долго загонялся с >> и логикой, но что-то не получается желаемое...

Плиз, бросьте коду, как это сделать????

Система MSVC 2005, но это не суть..
  Ответить с цитированием
Старый 14.06.2007, 11:20   #2   
error #65535
 
Аватар для maximn
 
Сообщений: 5,225
Регистрация: 16.11.2003
Возраст: 26

maximn вне форума Не в сети
сдвиг и остаток от деления на 2?
  Ответить с цитированием
Старый 14.06.2007, 12:09   #3   
Registered User
 
Аватар для netwind
 
Сообщений: 1,905
Регистрация: 25.03.2003

netwind вне форума Не в сети
Остаток от деления выдает в тебе математика. Низачот, за прогул занятия по битовым операциям.

Программист сделал бы так:

int c=34;
for (int i=0;i <8;i++) {
if (c & 1)
{ cout << "1";}
else { cout <<"0";}
c = c >> 1;
}
cout << endl;

непонятно чего тут сложного и где можно загоняться?

кстати,этот кусок не выводит двоичное представление числа в общепринятом виде.
если ты подобным образом печатал и проверял на калькуляторе - надо бы сдвигать наоборот влево
и проверять самый старший бит числом 128
  Ответить с цитированием
Старый 17.06.2007, 02:40   #4   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от netwind
Программист сделал бы так:
А грамотный программист сократил бы цикл до двух строк, а при желании - и до одной.

for (int с=34;c;c>>=1) cout << (c & 1);
  Ответить с цитированием
Старый 18.06.2007, 10:34   #5   
Registered User
 
Аватар для netwind
 
Сообщений: 1,905
Регистрация: 25.03.2003

netwind вне форума Не в сети
Part!zan, это уже хакир какой-то
  Ответить с цитированием
Старый 18.06.2007, 11:48   #6   
Бывалый форумец
 
Аватар для J++
 
Сообщений: 652
Регистрация: 05.08.2005

J++ вне форума Не в сети
Цитата:
for (int с=34;c;c>>=1) cout << (c & 1);
не годится если изначально c==0

можно

int c=34;
for (int i=0; i<sizeof(int)*8; i++, c>>=1) cout<<(c&1);
  Ответить с цитированием
Старый 18.06.2007, 11:53   #7   
error #65535
 
Аватар для maximn
 
Сообщений: 5,225
Регистрация: 16.11.2003
Возраст: 26

maximn вне форума Не в сети
а у меня трусы фиолетовые
  Ответить с цитированием
Старый 18.06.2007, 21:40   #8   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
J++, если изначально c=0, то и так понятно шо там все ноли.

maximn, рад за тебя

netwind, не, хакир бы на асме написал. или даже в машкодах сразу.
  Ответить с цитированием
Старый 21.06.2007, 22:34   #9   
Форумец
 
Аватар для Потерянный рай
 
Сообщений: 338
Регистрация: 21.06.2007

Потерянный рай вне форума Не в сети
Цитата:
Сообщение от Skech
Дано: переменная типа int, (максимальное значение 255 это для справки)
Надо: Взять по очереди каждий бит и посмотреть 0 или 1
Долго загонялся с >> и логикой, но что-то не получается желаемое...
Плиз, бросьте коду, как это сделать????
Система MSVC 2005, но это не суть..
если для тебя >> и "логика" это загон делай
(X & 1)>0 - true если младший бит выставлен в 1
и дели на два оставшееся число, гоу ту назад 7 раз.

и у int максимальное значение не 255, это для справки. это у тебя в задаче максимальное возможное значение у переменной 255.
  Ответить с цитированием
Старый 23.06.2007, 22:12   #10   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Потерянный рай, предлагаю развить условие, а то как-то несерьезно получается:
(X & (int)(log10(100)-.5))!=23*(X/5 - X/(int)(log(148.4131591026)+.5))
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind