Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неужели невозможно? Двоичный код в переменную... 
:(
    Опции темы
Jimmy
Дата 13.5.2003, 16:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Товарищи программеры...
не пойму чё то, неужели нельзя переменной присвоить двоичный код?
Или можно? Но как?
Я конечно понимаю, это "клин". Клинит меня, но вспомнить не могу и найти тоже не могу, как это сделать.
вот к примеру 16-ричный код, это понятно

int S = 0x0000ffff;

а .... двоичный то как?

confused.gif
  Вверх
Royan
Дата 13.5.2003, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



в этом нет необходимости и сделать это нельзя, хотя можно вайти из ситуации проиницилизировав перемнную двоично-десятичным кодом, то бишь записав 0 и 1 в строку, например так: "1011010"


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Jimmy
Дата 14.5.2003, 11:07 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ммммм.... не понял!!!
то есть как?


так?

a = 11001010; // что в принципе не верно!!!
или так?

a = "11001010"; // confused.gifconfused.gif

или я чего то не понимаю?

Спасибо конечно за ответ. Но нельзя ли разьяснить. Был бы очень благодарен!!!




  Вверх
DENNN
Дата 14.5.2003, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Да он и сам не знает smile.gif
PM ICQ   Вверх
Dov
Дата 14.5.2003, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Можно получить значение переменной в двоичном коде, используя itoa,
ввиде строки, разумеется.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
neutrino
Дата 15.5.2003, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 1
Всего: 62



Можно написать :#define с макросом и менять каждые 4 бита на шестнадцатиричную цифру. Что то типа:
Код

int Num= b(1010)-(1100)-(0110)-(1110);

и потом менять на:
Код

int Num=0xAC6E;



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
man2002ua
Дата 15.5.2003, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



Проще сделать ф-ю преобразования из строки в число и наоборот, и не парить себе мозги.


--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
Baa
Дата 15.5.2003, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



man2002ua, проще запустить calc.exe =) и вообще не парить никому ничего smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
man2002ua
Дата 15.5.2003, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 943
Регистрация: 12.11.2002
Где: Киев

Репутация: нет
Всего: 2



И вообще - счеты - лучший калькулятор, а калькуляотр БК-52 - лучший компутер!!

Чтобы сие не было чистым оффтопиком скажу, что в BCB и Delphi есть BinToHex и HexToBin



--------------------
"Нет ничего более постоянного, чем временное"
PM MAIL   Вверх
neutrino
Дата 15.5.2003, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: 1
Всего: 62



Да вообще почему бы не писать на асме? Там можно указать в бинарном виде.
А почему Вас, господин Jimmy, не устраивает шестнадцатиричная система счисления? Ведь она также удобна, как и двоичная...


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
DENNN
Дата 16.5.2003, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
А почему Вас, господин Jimmy, не устраивает шестнадцатиричная система счисления? Ведь она также удобна, как и двоичная..

Потому собственно и используется smile.gif
PM ICQ   Вверх
Unregistered1
Дата 18.5.2003, 17:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Точно не помню. А если попробовать 0x00001111b - помоему так
  Вверх
HexoGenus
Дата 19.5.2003, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Не :)
int c=0x001b;
ShowMessage(с);
выводит 27 (1*16^1+11*16^0) :) т.е. это шестнадцатеричная система :)
но прикол же я нашел :)
int c=010;
ShowMessage(с);
как думаете какое число выдаст? первая цифра 0!!!
в результате получаем 8!!!!
т.е. восьмеричная система :)
Так что остерегайтесь нулей впереди стоящих :))))

кстати кто сможет объяснить почему не работает
bool d[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int *g=(int *)d;
int c=*g;
ShowMessage(с);

Это сообщение отредактировал(а) HexoGenus - 19.5.2003, 21:04
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
DENNN
Дата 20.5.2003, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Потому, что для работы с массивом bool лучше воспользоваться bitset smile.gif
тем более, что в его конструктор можно передать значение вида const string& smile.gif
PM ICQ   Вверх
DarkDS
Дата 20.5.2003, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: нет
Всего: 16



Цитата(HexoGenus @ 19.5.2003, 21:03)
Не smile.gif
int c=0x001b;
ShowMessage(с);
выводит 27 (1*16^1+11*16^0) smile.gif т.е. это шестнадцатеричная система smile.gif
но прикол же я нашел smile.gif
int c=010;
ShowMessage(с);
как думаете какое число выдаст? первая цифра 0!!!
в результате получаем 8!!!!
т.е. восьмеричная система smile.gif
Так что остерегайтесь нулей впереди стоящих smile.gif)))

кстати кто сможет объяснить почему не работает
bool d[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int *g=(int *)d;
int c=*g;
ShowMessage(с);

int c=0x001b; и будет выдавать 27, так как 0х - означает что использована шеснадцатеричная система, а это цифры 0-9, a(10), b(11), c(12), d(13), е(14), f(15)
А то что 010 - это 8 во всех учебниках по Си пишут.
А с массивом не работает, так как ты приводишь массив булов к инту...
Кстати... Я как то видел разбиение на старший и младший части байта с помошью union... Может и тут пойдет smile.gif
PM MAIL   Вверх
Baa
Дата 20.5.2003, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



bool d[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
sizeof (d)? wink.gif
тут токо битовые поля помогут smile.gif


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
vickr
Дата 20.5.2003, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.5.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
кстати кто сможет объяснить почему не работает
bool d[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int *g=(int *)d;
int c=*g;
ShowMessage(с);

ShowMessage выводит 0 и правильно делает. Это 1-й элемент массива. А тебя что не устроило?

--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
DENNN
Дата 20.5.2003, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
sizeof (d)?

=32 и что дальше?
sizeof дает размерность массива, а не число байт которые он занимает. Тебя же не удивляет, что оператор [] возвращает верный результат, а не байт с 8 элементами?
Проблемы, связанные с тем что bool это в сущности бит возникаеют при использовании vector<bool>, но это уже другая песня....
PM ICQ   Вверх
Step
Дата 20.5.2003, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



товарищи, а вы через асм всавку не хотите сделать с дефайном


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 20.5.2003, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
товарищи, а вы через асм всавку не хотите сделать с дефайном

Сначала надо определиться что нужно, а потом уже вставки изобретать smile.gif
PM ICQ   Вверх
Step
Дата 20.5.2003, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



вопрос человек поставлен в принциае коректно, он даже пример дал для 16 системы, что тут определяться


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Nastya
Дата 20.5.2003, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 5
Всего: 44



Нет в С использование двоичных констант принципе не возможно.

Числовые константы могут быть в десятичном, шестнадцатиричном (начинаться с 0x) и восмиричном виде (начинатся с 0).


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Baa
Дата 20.5.2003, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цитата(DENNN @ 20.5.2003, 16:32)
=32 и что дальше?
sizeof дает размерность массива, а не число байт которые он занимает. Тебя же не удивляет, что оператор [] возвращает верный результат, а не байт с 8 элементами?
Проблемы, связанные с тем что bool это в сущности бит возникаеют при использовании vector<bool>, но это уже другая песня....

А вот и ничего подобного! sizeof дает число занимаемых байт!
А кол-во элементов вычисляется так: sizeof (b)/sizeof(b[0])


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Baa
Дата 20.5.2003, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Цитата(vickr @ 20.5.2003, 16:28)
ShowMessage выводит 0 и правильно делает. Это 1-й элемент массива. А тебя что не устроило?

Тут опять не совсем верно... 0 это хоть и первый элемент массива, но дело не в этом...
bool d[32]={0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
Если так написать, то чего выведет? Прально, 256, потому как берется 4 первых байта из массива при приведении к int'у.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
vickr
Дата 21.5.2003, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.5.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
Тут опять не совсем верно... 0 это хоть и первый элемент массива, но дело не в этом...
bool d[32]={0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
Если так написать, то чего выведет? Прально, 256, потому как берется 4 первых байта из массива при приведении к int'у.

Согласен, допустил неточность, приведение имени массива (bool*) к (int*) дает нам действительно первых 4 байта, а не 1 ( интересный результат дает попытка пройтись по массиву используя арифметику указателей - g++ несколько раз smile.gif ). Но непонятно, о чем изначально вопрос - массив-то в вопросе инициализирован как {0,0,0,0,...}, так что и первый элемент, и первые 4 дают одно и то же - 0.
Так что меня удивила формулировка вопроса "Почему это не работает?". Сам, правда, стараюсь не делать таких "зависящих от реализации" (по Страуструпу) преобразований.
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
HexoGenus
Дата 22.5.2003, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Экс. модератор
Сообщений: 110
Регистрация: 28.8.2002
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Цитата
А с массивом не работает, так как ты приводишь массив булов к инту...


Хммм... ну привожу... я что думаете этого не понимаю?
я не понимаю другого...
указатель это адрес в памяти ? так.
По этому адресу я в виде булов укладываю нолики и единички побитово...
потом то что хранится по этому адресу я принудительно считаю массивом интовским и 32 бита должны стать как раз одним интовским числом...
....
так почему это не работает? может к примеру адрес буловских указателей длиннее? или преобразование указателей можно как-то по особому выполнить... в конце концов это адрес в памяти или все же какое то смещение которое у интовского и булевого типа идут из разных точек?
Кто знает?
--------------------
Когда невозможно уже работать напряженнее, начни работать умнее.
PM MAIL WWW ICQ   Вверх
vickr
Дата 22.5.2003, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 13.5.2003
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата
Хммм... ну привожу... я что думаете этого не понимаю?
я не понимаю другого...
указатель это адрес в памяти ? так.
По этому адресу я в виде булов укладываю нолики и единички побитово...
потом то что хранится по этому адресу я принудительно считаю массивом интовским и 32 бита должны стать как раз одним интовским числом...

Так вот в чем проблема! Ты бы сразу написал, что там "не работает" smile.gif
еще раз спорный фрагмент:
Код

bool d[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
int *g=(int *)d;
int c=*g;

Итак, что здесь происходит:
1 строка: объявление массива из 32 bool с инициализацией: в памяти выделяется 32 байта (а не бита), т.е. каждый 0 или 1 занимают по 1 байту. Что касается d, то это, фактически, 4-байтный указатель на первый элемент массива (который, в свою очередь, имеет тип bool и занимает, таким образом 1 байт).
2 и 3 строка: Такому же 4-байтному указателю g присваивается адрес первого элемента массива, на первый взгляд, но (важный момент) - если ты прочитаешь значение, записанное по адресу g (int c = *g), то обнаружишь, что ты прочитал превые 4 элемента. Это происходит потому, что b и g - типизированные указателт. В общем, я увлекся. Baa до меня написал о том же, только короче. Короче, по адресу d хранится 00000000, 00000000, ..., 00000001 - всего 32 байта. Ты же ожидаешь там увидеть 00000000000000000000000000000111, т.е. значение типа int, 32 бита (причем старший разряд - знаковый). Вот вроде и все. Прошу прощения за некоторую косноязычность smile.gif
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.