![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Jimmy |
|
|||
|
Unregistered |
Товарищи программеры...
не пойму чё то, неужели нельзя переменной присвоить двоичный код? Или можно? Но как? Я конечно понимаю, это "клин". Клинит меня, но вспомнить не могу и найти тоже не могу, как это сделать. вот к примеру 16-ричный код, это понятно int S = 0x0000ffff; а .... двоичный то как? |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
в этом нет необходимости и сделать это нельзя, хотя можно вайти из ситуации проиницилизировав перемнную двоично-десятичным кодом, то бишь записав 0 и 1 в строку, например так: "1011010"
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| Jimmy |
|
|||
|
Unregistered |
Ммммм.... не понял!!!
то есть как? так? a = 11001010; // что в принципе не верно!!! или так? a = "11001010"; // или я чего то не понимаю? Спасибо конечно за ответ. Но нельзя ли разьяснить. Был бы очень благодарен!!! |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Да он и сам не знает
|
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Можно получить значение переменной в двоичном коде, используя itoa,
ввиде строки, разумеется. -------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Можно написать :#define с макросом и менять каждые 4 бита на шестнадцатиричную цифру. Что то типа:
и потом менять на:
-------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
Проще сделать ф-ю преобразования из строки в число и наоборот, и не парить себе мозги.
-------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
man2002ua, проще запустить calc.exe =) и вообще не парить никому ничего
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| man2002ua |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 943 Регистрация: 12.11.2002 Где: Киев Репутация: нет Всего: 2 |
И вообще - счеты - лучший калькулятор, а калькуляотр БК-52 - лучший компутер!!
Чтобы сие не было чистым оффтопиком скажу, что в BCB и Delphi есть BinToHex и HexToBin -------------------- "Нет ничего более постоянного, чем временное" |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Да вообще почему бы не писать на асме? Там можно указать в бинарном виде.
А почему Вас, господин Jimmy, не устраивает шестнадцатиричная система счисления? Ведь она также удобна, как и двоичная... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Потому собственно и используется |
|||
|
||||
| Unregistered1 |
|
|||
|
Unregistered |
Точно не помню. А если попробовать 0x00001111b - помоему так
|
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 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 --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Потому, что для работы с массивом bool лучше воспользоваться bitset
тем более, что в его конструктор можно передать значение вида const string& |
|||
|
||||
| DarkDS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 748 Регистрация: 6.5.2003 Где: Таллинн, Эстония Репутация: нет Всего: 16 |
int c=0x001b; и будет выдавать 27, так как 0х - означает что использована шеснадцатеричная система, а это цифры 0-9, a(10), b(11), c(12), d(13), е(14), f(15) А то что 010 - это 8 во всех учебниках по Си пишут. А с массивом не работает, так как ты приводишь массив булов к инту... Кстати... Я как то видел разбиение на старший и младший части байта с помошью union... Может и тут пойдет |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 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)? тут токо битовые поля помогут -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| vickr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.5.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
ShowMessage выводит 0 и правильно делает. Это 1-й элемент массива. А тебя что не устроило? --------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:) |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
=32 и что дальше? sizeof дает размерность массива, а не число байт которые он занимает. Тебя же не удивляет, что оператор [] возвращает верный результат, а не байт с 8 элементами? Проблемы, связанные с тем что bool это в сущности бит возникаеют при использовании vector<bool>, но это уже другая песня.... |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
товарищи, а вы через асм всавку не хотите сделать с дефайном
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Сначала надо определиться что нужно, а потом уже вставки изобретать |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
вопрос человек поставлен в принциае коректно, он даже пример дал для 16 системы, что тут определяться
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Нет в С использование двоичных констант принципе не возможно.
Числовые константы могут быть в десятичном, шестнадцатиричном (начинаться с 0x) и восмиричном виде (начинатся с 0). -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
А вот и ничего подобного! sizeof дает число занимаемых байт! А кол-во элементов вычисляется так: sizeof (b)/sizeof(b[0]) -------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Тут опять не совсем верно... 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 |
|||
|
||||
| vickr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.5.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Согласен, допустил неточность, приведение имени массива (bool*) к (int*) дает нам действительно первых 4 байта, а не 1 ( интересный результат дает попытка пройтись по массиву используя арифметику указателей - g++ несколько раз Так что меня удивила формулировка вопроса "Почему это не работает?". Сам, правда, стараюсь не делать таких "зависящих от реализации" (по Страуструпу) преобразований. --------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:) |
|||
|
||||
| HexoGenus |
|
|||
![]() Шустрый ![]() Профиль Группа: Экс. модератор Сообщений: 110 Регистрация: 28.8.2002 Где: Ростов-на-Дону Репутация: нет Всего: нет |
Хммм... ну привожу... я что думаете этого не понимаю? я не понимаю другого... указатель это адрес в памяти ? так. По этому адресу я в виде булов укладываю нолики и единички побитово... потом то что хранится по этому адресу я принудительно считаю массивом интовским и 32 бита должны стать как раз одним интовским числом... .... так почему это не работает? может к примеру адрес буловских указателей длиннее? или преобразование указателей можно как-то по особому выполнить... в конце концов это адрес в памяти или все же какое то смещение которое у интовского и булевого типа идут из разных точек? Кто знает? --------------------
Когда невозможно уже работать напряженнее, начни работать умнее. |
|||
|
||||
| vickr |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 13.5.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Так вот в чем проблема! Ты бы сразу написал, что там "не работает" еще раз спорный фрагмент:
Итак, что здесь происходит: 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 бита (причем старший разряд - знаковый). Вот вроде и все. Прошу прощения за некоторую косноязычность --------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:) |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |