• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana z binarnego na dziesiętny

Object Storage Arubacloud
+1 głos
752 wizyt
pytanie zadane 14 stycznia 2021 w C# przez Dmianos Nowicjusz (220 p.)

Postanowiłem napisać program który zamienia liczby z systemu binarnego na dziesiętny, jednak występuje dużo problem ponieważ nie wiem czemu ale wynik działania 2 * 2^0 pokazuje mi jako 49, może gdzieś zrobiłem głupi błąd? Niestety nie mogę znaleźć co źle zrobiłem.

static int ZamianaNaDziesietny(string binarna2)
        {
            int dziesietny = 0;
            for (int j = 0; j < binarna2.Length; j++)
            {
                dziesietny += Convert.ToInt32(binarna2[j] * Math.Pow(2, j));
            }
           
            return dziesietny;
        }

 

2 odpowiedzi

+1 głos
odpowiedź 14 stycznia 2021 przez VBService Ekspert (252,660 p.)
edycja 14 stycznia 2021 przez VBService

Jeżeli masz:

string binarna2

to 

binarna2[j]

zwraca typ char jeden znak z binarna2[j], to wtedy Convert.ToInt32( char "0" ) - zwraca kod ascii

co dla j=0 daje wartość 48 wink

using System;
namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            string binarna2 = "0";
 
            Console.WriteLine(" binarna2: {0}", binarna2);
            Console.WriteLine(" binarna2[indeks - 0] : {0}", Convert.ToInt32(binarna2[0]));
             
            Console.ReadKey();
        }
 
    }
}

no i ( j - integer)

for (int j = 0; ...)

a Math.Pow(double x, double y)

no i musisz mieć tzw. "wagę". W Twoim kodzie to tu:

Math.Pow(2, j)

, ale przy tym zapisie "czytasz" liczbę binarną od lewej binarna2[j], ale "waga" jest od 0 bo int j = 0

for (int j = 0; j < binarna2.Length; j++)
{
      dziesietny += Convert.ToInt32(binarna2[j] * Math.Pow(2, j));
}

trzeba wprowadzić "wagę" od najwyższej np. tak:

int dziesietny = 0;
int weight = binarna2.Length - 1;
for (int j = 0; j < binarna2.Length; ++j)
{
    dziesietny += (int)(binarna2[j] - '0') * (int)Math.Pow(2, (double)(weight - j));
}

Convert char to int in C# ]

komentarz 14 stycznia 2021 przez Dmianos Nowicjusz (220 p.)
w sumie zdążyłem po dłuższym czasie się tego domyśleć :) dzięki za odpowiedź ;)
komentarz 14 stycznia 2021 przez tmar1212 Bywalec (2,600 p.)
Convert.ToInt32() zwraca char(string)? Chyba jednak ineger, to by było bardzo mylące; a co to typ "char()"?
komentarz 14 stycznia 2021 przez VBService Ekspert (252,660 p.)

C# String Chars (Get Char at Index)

 

using System;

class Program
{
    static void Main()
    {
        // Get values from this string.
        string value = "hat";
        char first = value[0];
        char second = value[1];
        char last = value[value.Length - 1];

        // Write chars.
        Console.WriteLine("FIRST: {0}", first);
        Console.WriteLine("SECOND: {0}", second);
        Console.WriteLine("LAST: {0}", last);
    }
}

 

0 głosów
odpowiedź 14 stycznia 2021 przez VBService Ekspert (252,660 p.)
edycja 14 stycznia 2021 przez VBService

Moja propozycja zmian: wink

using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write(" Wprowadz liczbe dwojkowa : ");
            string binarna2 = Console.ReadLine();

            Console.WriteLine("\n Wartosc dziesietna to = {0}", ZamianaNaDziesietny(binarna2));
            
            Console.WriteLine("\n Wcisnij dowlny klawisz aby zakonczyc");
            Console.ReadKey();
        }
        
        static int ZamianaNaDziesietny(string binarna2)
        {
            int dziesietny = 0;
            int weight = binarna2.Length - 1;
            
            for (int j = 0; j < binarna2.Length; j++)
            {
                dziesietny += (int)(binarna2[j] - '0') * (int)Math.Pow(2, (double)(weight - j));
                
                // Pokaz obliczenia
                Console.Write("\n {0} * (2 ^ {1,-2} = {2,-4}){4,3}= {3}", (int)(binarna2[j] - '0'), (weight - j), (int)Math.Pow(2, (weight - j)), (int)(binarna2[j] - '0') * (int)Math.Pow(2, (weight - j)), ' ');
            }

            return dziesietny;
        }
    }
}

Convert char to int in C# ]

Podobne pytania

0 głosów
1 odpowiedź 421 wizyt
0 głosów
2 odpowiedzi 157 wizyt
pytanie zadane 1 sierpnia 2015 w C i C++ przez Mateusz Leonowicz Początkujący (310 p.)
–1 głos
0 odpowiedzi 1,633 wizyt
pytanie zadane 18 października 2020 w Python przez Szymi12 Użytkownik (630 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...