|
|
|
Помогите разъяснить для себя момент с битами
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток есть небольшой пример из книги #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' - зачем его добавлять и если кто знает как данное преобразование происходит. Поскольку именно в книге этот момент упущен. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2006, 23:33 |
|
||
|
Помогите разъяснить для себя момент с битами
|
|||
|---|---|---|---|
|
#18+
Того, кто написал эту книгу надо пристрелить. Очевидно, что пример описывает преобразование целого числа в символьное двоичное представление. Однако для учебного примера, этот исходник тяжеловат. Для всех 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' Проверьте, нет ли опечатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 02:18 |
|
||
|
Помогите разъяснить для себя момент с битами
|
|||
|---|---|---|---|
|
#18+
Пардон.... вот так. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 02:21 |
|
||
|
Помогите разъяснить для себя момент с битами
|
|||
|---|---|---|---|
|
#18+
Да именно bin_str = (01&n) + '0' .......опечатался Спасибо за разъяснение, теперь все более менее понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 11:34 |
|
||
|
Помогите разъяснить для себя момент с битами
|
|||
|---|---|---|---|
|
#18+
у меня почему то при добавлении сообщения в форум теряется последовательнось ' ' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2006, 11:35 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=371&tid=2031955]: |
0ms |
get settings: |
12ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 346ms |

| 0 / 0 |
