Как перевести число в двоичную систему счисления?

программирование математика информатика С++ система счисления

Здраствуйте, я пишу курсач на с++, и буду очень благодарен если вы мне поможете!

Мне надо перевести число в разные системы счисления, но проблема состоит в том что я не могу перевести минусовое дробное число из десятичной в двуичную и обратно!

Например:
-0,321 в двоичную,
0,321*2=0
0,642*2=1
0,248*2=0
0,568*2=1
.....

Тоесть наше число 0,0101(в двоичной), но как его переделать под минус?
И как минусовое двоичное с точкой перевести в десятичное?

Если не сложно можете написать отрывок из кода на С++, но впринцыпе простого обьяснения будет вполне достаточно!

Примечание:
P.S. Вариант "добавить минус" не подходит!

Примечание:
Тоесть вы предлагаете написать 1,0101 и ето будет перевод с -0,321

Тогда раскажите пожалуйста как перевести 1,321 в двоичную систему, разве ето не будет 1,0101...

Примечание:
с информатикой я знаком просто запутался в переводе с минусом и точкой,

а минус зависит не только от первого бита, а от первого бита в байте!

при одном байте: 10000101 будет -123
при двух : 133(без минуса)

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

Примечание:
как вы уже поняли, я пишу курсач.

и если пользователь в двуичном режиме введет: 1,0101

как ему программа должна перевести? 1,325 или -0,325?

или он должен выбрать учитывать знак или нет?

Примечание:
дык, извините но так калькулятор на Windows 7 перевел!

>при одном байте: 10000101 будет -123
>при двух : 133(без минуса)

Примечание:
да, я действительно чушь написал!
тоесть если пользователь ввел 1,0101 ето (-0,325)
если 01,0101 ето 1,325

а если -9,325 то:

-9 в двоичной
9/2=1
4/2=0
2/2=0
1
тоесть 9=1001
минус означает : мы конвертируем биты и добавляем единицу: -9=0110+0001=0111
теперь ставим перед нулём единицу -9=10111

а 0,325 переводим как и в прошлый раз и получается -9,325=10111,0101...

так?

Примечание:
блин, ошибся конвертируем еще 0,0101 -> 0,1010

-9,325=11110111,1010

Так?
я знаю, может я и задолбал, но ответьте пожалуйста правильно ли я понял?

Примечание:
ура!
Чудо свершилось, и я понял))))

а теперь уточняю:

если переводить -9,5

при модуле там: 1001,1 и бесконечное количество нулей

мы можем взять сколько захочем?

тоесть: 1001,100000000
конвертируем, добавляем 1 и дописываем старший знаковый разряд: 10110,01111111111111+1=10110,1000000000000

01001,10000000+10110,10000000=0000000,00000000

сам спросил и сам ответил!

теперь я окончательно понял,вопросов больше нет!
Всем спасибо за помощь! =)
Ответы:
за знак отвечает первый бит в числе, насколько я помню.
0 - положительное число
1 - отрицательное
кошмар какой.  и кто вам с++ дал, когда вы с основами информатики не знакомы.
ИТАК, для тех кто в танке: дробные числа переводят в двоичную систему по частям, сначала целую часть, потом дробную, последовательным делением/умножением на 2.
За знак числа обычно отвечает первый бит в числе, если число отрицательное то он =1 (ну если конечно тип у вас подходящий, если вы возьмете беззнаковое целое то ваши дроби с минусами естественно будут поняты неправильно).
> а минус зависит не только от первого бита, а от первого бита в байте!
фигасебе. т. е. в 4-байтовом числе у вас есть аж 4 возможности поменять знак? вы случаем не бредите?
Знак зависит от _первого_бита_ _в_числе_, а не в байте. Т. е. первый бит первого байта отвечает за знак и никакой другой бит.
А число 10000101 при двух байтах положительное, потому что вы опустили первый байт и в действительности оно выглядит как 0000000010000101, теперь видим что первый бит стоит в значении 0. Никакой иной зависимости знака нет. Разве что тип данных - беззнаковые числа плевать хотели на значение первого байта, там это всего лишь разряд, а никакой не флаг для определения знака числа.
> Дополнение #5
А калькулятор винды с числами какой разрядности вычисления проводит? Сколько там бит в числе вы не задумывались? Или может быть разрядность числа он определяет по вводу?
Берите компилятор и IDE, задавайте значения переменным той или иной разрядности в битах и смотрите что выйдет.
А еще лучше купите учебник по информатике для 5-го класса.
> Дополнение #4
По разрядности переменной/типу данных/допустимому максимальному размеру числа в байтах
ИЛИ
По количеству введенных знаков выбирать ту или иную разрядность. Естественно, что число будет занимать целое количество байт, поэтому нужно не первую цифру в полученной записи брать, а дописывать слева некоторое количество нулей при необходимости, и уже затем определять знак.
> я знаю, может я и задолбал, но ответьте пожалуйста правильно ли я понял?
 нет.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.