Розробка ·
25 вересня 2009, 13:08
1544
C#.net из двоичной в десятиричную...
привет... есть ли в си шарпе готовые класы для перевода из двоичной в десятиричную систему счисления...???
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
👍ПодобаєтьсяСподобалось0
Facebook
LinkedIn
15 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівпжста)
rassamaha, Спасибо.
число −150, не влезает в байт. т.к. 1ый бит знаковый, итого максимум можно записать ± 127 в ПК!, но опять же, т.к. существует ДК, то можно записать и −128. пример был приведен выше.
Есть безнаковый байт и там от 0 до 255, тогда 150 можно записать, но не −150)
Перечитай вику, там все правильно написано.
Если без лишних букв, то переводится в ДК на примере числа (-11)
Или словесное описание алгоритма:
При таких описаниях, вообще не вижу помех выйти за пределы и (-128)Например, возьмем число (-150):
двоичный код +150 инверсия +1
-150 —> 10010110 —> 01101001 —> 01101010
ну все нормально, вложились в 1 байт, только вот после (-128) старший бит в ДК равен 0, а это неправильно, так как он знаковый, то он должен быть равен 0, только на основании этого я и сделал вывод, почему диапазон заканчивается на (-128) включительно.
Дальше начал сходить с ума, и решил проверить, что будет если, например, (151) суммировать с (-150) неправильно посчитанным выше, по идее должно получиться что то неправильное, смотрим:
10010111 (151) + 01101010 (типа −150) = 100000001 — получили 9 бит, а есть всего 8, откинем старший разряд, получим, 151−150=1.
ДК
там вроде все нормально расписано.
офтоп: ох и напрягали нас в универе по этому поводу, строили сумматоры, вычитатели, регистры и прочую дребедень) сейчас понимаю, что это дало нам: лучшее понимание, что происходит за кулисами железа.мне интересно и о отрицательном ноле, только я вот с ДК еще не до конца разобрался:
смотрим как получить обратный код:
со знаковыми разрядами — это прямой код, в прямом коде для записи числа 7 бит — (128) не влазит.: (rassamaha, можете расписать сам алгоритм, как Вы переводите в ДК?
2 level1 — значит число хранится в ДК. Архитектура х86 работает в ДК. В ПК действительно только ± 127.
Есть еще понятие отрицательный ноль в архитетуре компьютеро, но наверно тебе это не интересно:)
я слышал о прямом, обратном и дополнительном коде.
это вырезка из документации, исходя из нее крайний бит СТРОГО предназначен для записи знака числа, а 7 бит СТРОГО предназначены для записи самого числа, значит, получается, что мы должны впихнуть (128) в 7 бит, но как? в 7 бит — максимум лезет 127, то естьle мы можем работать с диапазоном от (-127) до (127)
1 000 0000 это что в2-ичном формате?
блин... где ты был раньше... я уже свой метод написал по переводу...:)
Про Дополнительный Код- ДК слышал?
0 111 1111 — это 127
1 111 1111 — это −128, ибо все еденицы кроме первой инвертируются, и получается число 128,!!!, но т.к. это в знаковом разряде 1, то «-» итого −128.
Есть еще Обратный Код (OK) и вроде Инверсный Код (ИК)
OK используется в Маках, поэтому трудно установить Microsoft на Макинитошское железо, ибо Microsoft использует ДК.
Могу еще рассказать как сумматор работает — 133 серии:)
З.Ы. Все гениальное просто =)
1 байт = 8 бит, из 8 бит 1 бит идет как знаковый разряд, в остальные 7 бит записываем число, 127 (10) — это как раз 1111111 (2) — все норм, все влазит,
а как (-128) влазит не пойму: (
есть, работают в обе стороны, примерно так
возьмите такой вариант.
using System; namespace ConsoleApplication1 { class Program { static string DecToBase(int num_value, int base_value) { var max_bit = 32; var dec_base = 10; var hexchars = new[] { ’A’, ’B’, ’C’, ’D’, ’E’, ’F’ }; var result = string.Empty; var result_array = new int[32]; for (/* nothing */; num_value > 0; num_value /= base_value) { int i = num_value % base_value; result_array[—max_bit] = i; } for (int i = 0; i < result_array.Length; i++) { if (result_array[i] >= dec_base) { result += hexchars[(int)result_array[i] % dec_base].ToString(); } else { result += result_array[i].ToString(); } } result = result.TrimStart(new char[] {’0′}); return result; } static void Main(string[] args) { int i = 256; Console.WriteLine("{0} in binary is {1}", i, DecToBase(i, 2)); Console.ReadLine(); } } }