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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 120 в виде 1111000, Из серии один вопрос-один ответ 
:(
    Опции темы
new_web
Дата 13.2.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как представить компилятору число в  виде едениц и нулей
чтобы он понял
что, например, 
1111000 это не один миллион стоодиннадцать тысяч, а именно 120 в его двоичном представлении?

Builder 6

Это сообщение отредактировал(а) new_web - 13.2.2008, 20:34
PM MAIL   Вверх
susanin
Дата 13.2.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я конечно не уверен, потому что сам еще новичок...но боюсь что никак нельзя....если только функцией перевести введенное число из 2 сс в 10 сс
PM MAIL   Вверх
jonie
Дата 13.2.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



компилятор не умеет понимать 2-ый формат. Используйте 16,8,10 основания СС. Перевести не составлят труда даже в уме.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Fazil6
Дата 13.2.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Код

#include<math.h>
#include<iostream>
#include <string>
#include <algorithm>

namespace BIN_OPERATIONS
{

int binToint(const std::string &s1)
{// перевод строки в 10-е число
    int z1 = 0;
    for(int i = (int)s1.length() - 1; i > -1  ; --i)
    {
        if((s1[i] != '0') && (s1[i] != '1')) 
            throw std::runtime_error("not bin symbol") ;

        if((s1[i] - '0'))
            z1 = z1 + (int)pow(2, int(s1.length() - 1 - i)   );
    }
    return z1;
}

std::string intToBin(int value)
{// перевод в двоичное

    std::string bufer; 
    if(!value) { bufer.push_back('0'); return bufer; }

    while(value)
    {
        bufer.push_back(char(value % 2 + '0'));
        value /= 2;
    }

    std::reverse(bufer.begin(), bufer.end());
    return bufer;
}

std::string bin_sum(const std::string &s1,  const std::string &s2)
{
    return intToBin(binToint(s1) + binToint(s2));
}

std::string bin_minus(const std::string &s1,  const std::string &s2)
{
    return intToBin(binToint(s1) - binToint(s2) );
}
std::string bin_mult(const std::string &s1,  const std::string &s2)
{
    return intToBin(binToint(s1) * binToint(s2));
}

std::string bin_div(const std::string &s1,  const std::string &s2)
{
    int z = binToint(s2); 
    if(!z) throw std::runtime_error("divide by zero") ;
    return intToBin(binToint(s1) / z );
}

};

int main()
{
    std::string s1("101");
    std::string s2("011");
    

    try
    {
        std::cout << BIN_OPERATIONS::bin_sum(s1, s2) << std::endl;
        
        std::cout << BIN_OPERATIONS::bin_minus(s1, s2) << std::endl;
        
        std::cout << BIN_OPERATIONS::bin_mult(s1, s2) << std::endl;
        
        std::cout << BIN_OPERATIONS::bin_div(s1, s2) << std::endl;

    }
    catch(const std::runtime_error &e)
    {
        std::cout << e.what();
    }
    return 0;
}



PM MAIL   Вверх
PPS05
Дата 13.2.2008, 23:51 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

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



Взято с rsdn.ru:

Код

#define BIN8(x) BIN___(0##x)
#define BIN___(x)                                        \
    (                                                \
    ((x / 01ul) % 010)*(2>>1) +                      \
    ((x / 010ul) % 010)*(2<<0) +                     \
    ((x / 0100ul) % 010)*(2<<1) +                    \
    ((x / 01000ul) % 010)*(2<<2) +                   \
    ((x / 010000ul) % 010)*(2<<3) +                  \
    ((x / 0100000ul) % 010)*(2<<4) +                 \
    ((x / 01000000ul) % 010)*(2<<5) +                \
    ((x / 010000000ul) % 010)*(2<<6)                 \
    )

#define BIN16(x1,x2) \
    ((BIN(x1)<<8)+BIN(x2))

#define BIN24(x1,x2,x3) \
    ((BIN(x1)<<16)+(BIN(x2)<<8)+BIN(x3))

#define BIN32(x1,x2,x3,x4) \
    ((BIN(x1)<<24)+(BIN(x2)<<16)+(BIN(x3)<<8)+BIN(x4))

#define BIN64(x1,x2,x3,x4,x5,x6,x7,x8) \
    ((__int64(BIN32(x1,x2,x3,x4)) << 32) + __int64(BIN32(x5,x6,x7,x8)))

...

char  i1 = BIN8 (101010);
short i2 = BIN16(10110110,11101110);
long  i3 = BIN24(10110111,00010111,01000110);
long  i4 = BIN32(11101101,01101000,01010010,10111100);



--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
new_web
Дата 14.2.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Fazil6, Спасибо, Ваш пример понятен, попробую его приделать к своим нуждам!


PPS05,  к сожалению, мне пока многое непонятно(((

Плохо, что компилятор не понимает двоичный код, может, на  asm заплатку сделать, он понимает двичныый код, жаль. я асма не понимаю...
PM MAIL   Вверх
bsa
Дата 14.2.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(new_web @ 14.2.2008,  00:13)
PPS05,  к сожалению, мне пока многое непонятно(((

Плохо, что компилятор не понимает двоичный код, может, на  asm заплатку сделать, он понимает двичныый код, жаль. я асма не понимаю...

А чего тут непонятного? Он написал макрос, который из "двоичного" числа, делает "10-е", попутно преобразовывая его в восьмиричное (0##x - дописывание 0 перед значением x).
* - умножение
/ - деление
% - остаток от деления
>> - двоичный сдвиг вправо на n бит (считай деление на 2 в степени n)
Что непонятного?

Это сообщение отредактировал(а) bsa - 14.2.2008, 11:47
PM   Вверх
jonie
Дата 14.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



имхо один фиг не ответ на вопрос) просили компилятор как заставить
как я понимаю хочется чтобы в исходниках было 001001010b и компилятор это понял бы.
или у меня проблемы с русским языком в части понимания смысла ?smile


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
PPS05
Дата 14.2.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

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



Цитата(jonie @  14.2.2008,  14:03 Найти цитируемый пост)
компилятор как заставить


Мой вариант и заставит компилятор.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
new_web
Дата 14.2.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо всем, за столь деталные ответы!
Я конечно, постараюсь в целях самообразования понять всё, да и куда я денусь?
Я очень рад, что задал этот вопрос, так как много понял из механизмов, как вообще работает компьютер.
Бинарное число мне было нужно для того. чтобы увидеть состояние регистров, точнее. чтобы их сравнить. Побродив немного в нетрях своих мозгов. я понял. что мне бинарное число и не нужно вовсе,
(но, если бы я не попробовал код Fazil6, то я бы ничего не понял))),  так как я могу работать с любым представлением числа!
Мне нужно было знать, на каком регистре получается несовпадение битов числа
Код

int х=nSomeFunc1();
int y=nSomeFunc2();
bool bRegister[n];
for(int i=0,b=1;i<n;i++,b*=2)
{
if((x&b)!=(y&b))bRegister[n]=true;//в этом регистре несовпадение!
}

Но, я бы до этого никогда не додумался. если бы Вы все мне не помогли!

Поскольку. я до конца не разобрался во всём. что касается перевода чисел (нехватает времени((, то вопрос пока оставляю нерёшённым. так как на эту тему можно ещё узнать много интересного.


PM MAIL   Вверх
jonie
Дата 14.2.2008, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



PPS05 ну незнаю) имхо число и код вычисления что будет записан компилятором (а мож и не будет - смотря какой оптимизатор) не одно и тоже. Это предлагаю закрыть.

По теме : "что касается перевода чисел " - читай школьную информатику, тут все в 100% совпадает с ней.
перевод из любой системы в 2-ую - деление на 2, обратно - умножение 8-)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
TeAnton
Дата 15.2.2008, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Советую почитать Википедию по запросам: "Система счисления", и "Позиционная система счисления".
PM MAIL   Вверх
Mayk
Дата 16.2.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(jonie @  15.2.2008,  03:39 Найти цитируемый пост)
PPS05 ну незнаю) имхо число и код вычисления что будет записан компилятором (а мож и не будет - смотря какой оптимизатор) не одно и тоже.

если вместо моветонного макроса использовать шаблоны с enum'ами, то точно будет всё вычисленно в CT.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
new_web
Дата 19.2.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Mayk @  16.2.2008,  14:54 Найти цитируемый пост)
если вместо моветонного макроса использовать шаблоны с enum'ами, то точно будет всё вычисленно в CT.


Мда, такой фразой можно череп раздробить smile 

Спасибо всем за советы и помощь. но всё-таки кое-чего понять не могу...

Здесь я задал вопросhttp://forum.vingrad.ru/forum/topic-194245...1417608/30.html, насчёт управления портом LTP, и благодаря помощи добился своего, и сделал програмку, которая управляет портами.
http://new-web.ucoz.ua/ltp_demo.rar
Не понимаю. почему я записываю в порт Data 127, то читаю из порта 127 - а когда 128, - в порту окажется минус 128
тоесть 
128=-128;
129=-127;
...и так дальше! В чём тут проблема? я неправильно что-то не то написал в классах, или, попросту иначе не получится? 
Я пробовал всякими способами, но 127-это 127, а 128 это -128
После упорных поисков, я решил. что мне неважно, запишется там 255 или -1, так как задача была поменять напряжение на любых выводах порта Data и  Control  LTP, и задача быал решена.
Но, интересно, почему так получается, и можно ли привести это число в положительное?
PM MAIL   Вверх
Fazil6
Дата 19.2.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

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



Цитата(new_web @  19.2.2008,  10:13 Найти цитируемый пост)
Но, интересно, почему так получается, и можно ли привести это число в положительное?

скорее всего у тебя считывается в переменную типа signed char , а максимальное его значение 127, поэтому и получаешь, используй unsigned char и будут положительные значения до 255
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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