Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разъяснить для себя момент с битами / 6 сообщений из 6, страница 1 из 1
11.02.2006, 23:33
    #33539133
Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
Всем доброе время суток
есть небольшой пример из книги

#include<iostream.h>
char bin_str [8*sizeof(int)+1];
int number = 01;
int main ()
{
int i=0;
static int size = 8*sizeof(int);
for(i=size-1;i>=0;i--,number>>=1)
bin_str = (01 & number)+ '0';
bin_str[size] = '\0';
cout << "i =" << bin_str << endl;
return 0;

Вопрос возник вот в чем в книге сказано что операция (01 & number) возвращает 0 или 1 а в элемент строкового массива надо внести символ '0' или '1' и в этом преобразовании помогает добавление кода ASCII '0'. Для себя мне хотелось бы понять почему элементу массива возможно присвоить значение только после добавления кода '0' - зачем его добавлять и если кто знает как данное преобразование происходит. Поскольку именно в книге этот момент упущен.
Заранее спасибо.
...
Рейтинг: 0 / 0
12.02.2006, 02:18
    #33539227
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
Того, кто написал эту книгу надо пристрелить.
Очевидно, что пример описывает преобразование
целого числа в символьное двоичное представление.
Однако для учебного примера, этот исходник тяжеловат.

Для всех 32 итераций цикла происходит заполнение
символьного массива нулями или единичками.

Выражение '0'+n возвращает код символ, который
отстоит от нуля на n позиций.

Выражение (01 & number) - по смыслу битовая операция.
Она проверяет состояние младшего бита и возвращает
десятичную единицу или ноль.

В комплексе это будет (01 & number)+ '0' как раз
возвращать символ '0' или '1'. Однако я-бы
это выражение перевернул так.

'0' + (01 & number)

Для C++ ничего не меняется, однако для более
строгих языков появляется неявное приведение типа.
Мне этот способ больше нравится. Вообще
такие вещи принято записывать через тернарную
операцию.

Следующее присвоение мне не очень понятно.

bin_str = (01 & number)+ '0'

Я-бы записал его так:

bin_str = (01 & number)+ '0'

Проверьте, нет ли опечатки.
...
Рейтинг: 0 / 0
12.02.2006, 02:21
    #33539229
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
Пардон.... вот так.

Код: plaintext
1.
bin_str[i] = ( 01  & number)+ '0'
...
Рейтинг: 0 / 0
12.02.2006, 11:34
    #33539376
Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
Да именно
bin_str = (01&n) + '0'
.......опечатался

Спасибо за разъяснение, теперь все более менее понятно
...
Рейтинг: 0 / 0
12.02.2006, 11:35
    #33539377
Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
у меня почему то при добавлении сообщения в форум теряется последовательнось ' '
...
Рейтинг: 0 / 0
12.02.2006, 11:37
    #33539379
Алексей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разъяснить для себя момент с битами
Все понял
Код: plaintext
 bin_str [i]= ( 01 &n) + '0'
просто в тектсе
Код: plaintext
 [i]
игнорируется
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите разъяснить для себя момент с битами / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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