none
C# Как перевести из двоичной в восьмеричную и шестнадцатеричную систему счисления ? RRS feed

  • Вопрос

  • C# Как перевести из двоичной в восьмеричную и шестнадцатеричную систему счисления.

    Я использовал Convert.ToString( x , 8 ); и соответственно Convert.ToString( x , 16 ); А где можно найти формулу / алгоритм для вычисления???

    • Перемещено YatajgaEditor 25 сентября 2014 г. 5:39
    24 сентября 2014 г. 15:44

Ответы

  • Алгоритм единый для перевода в любую систему счисления (хоть в 5-ричную). Делим исходное число на основание системы счисления, остаток от деления дает младшую цифру искомого числа в этой системе, а частное снова делим на основание системы и т.д. пока частное не станет = 0. В результате получаем число в искомой системе.

    К примеру, нужно число 25 перевести в восьмеричную систему:

    25 : 8 = 3 (1 в остатке)

    3 : 8 = 0 (3 в остатке)

    Получилось число 31 в восьмеричной системе.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 25 сентября 2014 г. 12:09
    • Предложено в качестве ответа Oleg Kurzov 25 сентября 2014 г. 13:12
    • Помечено в качестве ответа Immortality Cat 25 сентября 2014 г. 15:14
    • Снята пометка об ответе Immortality Cat 25 сентября 2014 г. 15:40
    • Помечено в качестве ответа YatajgaEditor 29 сентября 2014 г. 7:15
    25 сентября 2014 г. 12:09

Все ответы

  • В учебнике :) Одна восьмеричная цифра это 3 двоичных бита, а одна шестнадцатеричная - 4 бита.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    24 сентября 2014 г. 19:05
  • Я это знаю, но препод сказал по какой то формуле... Без всяких string и массивов даже

    string n = textBox1.Text;               
    TextBox1.Text
    if (radioButton2.Checked)
    {
    int sum = 0;                              
    for (int i = 0; i < n.Length; i++)                  {
    sum = sum * 2 + Convert.ToInt32(n.Substring(i, 1));                 }
    textBox2.Text = sum.ToString();     //             }
    if (radioButton1.Checked)
    {
    string sum = "";
    string[] arr8;                                      
    arr8 = new string[8] { "000", "001", "010", "011", "100", "101", "110", "111" };
    if (n.Length % 3 == 0)                    {
    for (int i = 0; i < n.Length; i = i + 3)
    {
    for (int j = 0; j < 8; j++)
    {
    if (n.Substring(i, 3) == arr8[j])
    {
    sum = sum + j.ToString();
    }
    }
    }
    textBox2.Text = sum;
    }
    else                        
    {
    MessageBox.Show("Введите кратное 3-м количество знаков");
    }
    }
    if (radioButton3.Checked)
    {
    string sum = "";            
    string[] arr16;             
    arr16 = new string[16] { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };
    if (n.Length % 4 == 0)
    {
    for (int i = 0; i < n.Length; i = i + 4)
    {
    for (int j = 0; j < 16; j++)
    {
    if (n.Substring(i, 4) == arr16[j])
    {
    sum = sum + j.ToString();
    }
    }
    }
    textBox2.Text = sum;
    }
    else
    {
    MessageBox.Show("Введите кратное 4-м количество знаков");
    }
    }

    Извиняюсь за какакод

    25 сентября 2014 г. 5:33
  • Нет таких формул. Алгоритм будет основываться на знании, что есть система исчисления с основанием n и как происходит формирование числа в такой системе. Отсюда вы можете перевести что угодно, во что угодно.

    Sergey

    25 сентября 2014 г. 11:38
  • Нет таких формул. Алгоритм будет основываться на знании, что есть система исчисления с основанием n и как происходит формирование числа в такой системе. Отсюда вы можете перевести что угодно, во что угодно.

    Sergey

    Извините, но я не очень Вас понял... Только то, что нет формул...А собственно говоря, какой алгоритм примерно будет??? Препод сказал что формула нужна...

    25 сентября 2014 г. 12:00
  • Алгоритм единый для перевода в любую систему счисления (хоть в 5-ричную). Делим исходное число на основание системы счисления, остаток от деления дает младшую цифру искомого числа в этой системе, а частное снова делим на основание системы и т.д. пока частное не станет = 0. В результате получаем число в искомой системе.

    К примеру, нужно число 25 перевести в восьмеричную систему:

    25 : 8 = 3 (1 в остатке)

    3 : 8 = 0 (3 в остатке)

    Получилось число 31 в восьмеричной системе.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 25 сентября 2014 г. 12:09
    • Предложено в качестве ответа Oleg Kurzov 25 сентября 2014 г. 13:12
    • Помечено в качестве ответа Immortality Cat 25 сентября 2014 г. 15:14
    • Снята пометка об ответе Immortality Cat 25 сентября 2014 г. 15:40
    • Помечено в качестве ответа YatajgaEditor 29 сентября 2014 г. 7:15
    25 сентября 2014 г. 12:09
  • Алгоритм единый для перевода в любую систему счисления (хоть в 5-ричную). Делим исходное число на основание системы счисления, остаток от деления дает младшую цифру искомого числа в этой системе, а частное снова делим на основание системы и т.д. пока частное не станет = 0. В результате получаем число в искомой системе.

    К примеру, нужно число 25 перевести в восьмеричную систему:

    25 : 8 = 3 (1 в остатке)

    3 : 8 = 0 (3 в остатке)

    Получилось число 31 в восьмеричной системе.


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    Это я знаю, но тут есть одно "но", как это программно задать... я не дотумкиваю...
    25 сентября 2014 г. 14:43
  • Какой формат исходных данных у Вас (число, строка)? Что требуется получить на выходе?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 сентября 2014 г. 14:45
  • Какой формат исходных данных у Вас (число, строка)? Что требуется получить на выходе?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    У меня textBox1 ввод и textBox2 вывод

    получить то это одно - я это уже двумя способами сделал

    а вот препод говорит что нужно по какой то формуле действовать

    я делал через Convert.ToString( num , 8 ) а так же через массив чисел - по триплетам разбивал

    а нужно как то по формуле...

    25 сентября 2014 г. 15:05
  • В textBox1 в какой системе счисления вводятся значения? В 2-ой или в 10-ой.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 сентября 2014 г. 15:09
  • Какой формат исходных данных у Вас (число, строка)? Что требуется получить на выходе?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


                char[] ch = textBox1.Text.ToCharArray();
                int parent = 0;
                int count = 0;
                for (int i = ch.Length - 1; i >= 0; --i)
                {
                    int j = int.Parse(ch[i].ToString());
                    if (count != 0 || j != 0)
                        parent += (int)Math.Pow(j * 2.0, count);
                    count++;
                }
    if (checkbox1.Checked)
    textBox2.Text = parent.ToString();
    
    Вот примерно как это
    25 сентября 2014 г. 15:13
  • В textBox1 в какой системе счисления вводятся значения? В 2-ой или в 10-ой.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    Да в двоичной

    Вывод нужно сделать в 8 - 10 - 16

    в 10 сделал, а вот с 8 и 16 проблемка...

    выше я показал как я сделал через массивы и триплеты, но сказали так нельзя

    потом сделал через Convert.ToString( NUM , 8 ); тоже нельзя

    сказали над по формуле

    • Изменено Immortality Cat 25 сентября 2014 г. 15:16 дополнение
    25 сентября 2014 г. 15:14
  • Ох уж эти универы, лучше спросите по какой формуле, иначе мозг долбать еще долго будут.
    26 сентября 2014 г. 7:02
  • Да нет никакой формулы, чушь какая-то :( Надо запрограммировать алгоритм разбиения двоичного представления на тройки (четверки) битов и каждую группу представить цифрой. Либо преобразовать двоичное представление в десятичное, а дальше делить (как я рассказал ранее). Покажите Вашему преподавателю учебник. Мне больше нечем Вам помочь, увы. Писать за Вас программу желания не испытываю.

    P.S. Указанный мною учебник - первый попавшийся в поисковике, могли бы, наверное, и сами найти :)


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!


    • Изменено kosuke904 27 сентября 2014 г. 18:38
    27 сентября 2014 г. 18:31
  • Уважаемый пользователь, не вижу дальнейших причит оставлять тему открытой. Всё, что нужно уже было сказано, остаётся чуточку поработать самому :)

    Сделаем содержимое сообщества лучше, вместе!

    29 сентября 2014 г. 7:15
    Модератор