Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[c++] dziesiętny na szesnastkowy


Rekomendowane odpowiedzi

Opublikowano
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i;

cout<<"Wprowadz liczbe: ";
cin>>i;
cout<< "Zapis szesnastkowy: "<< hex << i << endl;


getch();
}

Mógłby ktoś napisać ten sam program tyle ,że bez funkcji hex.

Program ma zamieniać liczbę szesnastkową a dziesiętną i odwrotnie.

Opublikowano

no to, z liczby 10 na 2, i z 2 na 16

zamiana z 10 na 2 banał

wyciągasz największe możliwe liczby z dziesiętnej

np. wiesz że jest 1,2,4,8,16,32,64,128 itd.

lecz aby łatwiej było, zapisujemy odwrotnie czyli

itd. 128,64,32,16,8,4,2,1

i np. mamy liczbe dziesiętną

więc mamy np. liczbe dziesiętną 55, więc szukamy największej liczby która pasuje, czyli

32, odejmujemy od 55 32 i zostaje nam do znalezienia 23, wiec szukamy, jest 16, odejmujemy, zostaje 7, więc odejmujemy 4, zostaje 3, i odejmujemy 2 i 1

i teraz uzupelniamy

patrząc na ten zapis co dałem ci wyżej, jest to potęgowanie 2, jeżeli liczba jest w tym zapisie, to będzie 1, jeżeli nie będzie to będzie zero, czyli

32 było więc = 1, 8 nie było czyli 0

więc cała liczba będzie wyglądała tak

1(32)1(16)0(8)1(4)1(2)1(1) = nawiasy dałem tylko aby przedstawić to w prosty sposób, a liczba powinna wyglądać tak 110111

teraz chcemy na 16 zamienić, tutaj zapis tych liczb wygląda tak

8,4,2,1

więc powinniśmy podzielić nasz kod binarny co 4 częsci, czyli 11,0111 , możemy też dodać zera aby to jakoś wyglądało czyli 0011,0111

i każde 4 współczynniki oznaczają liczbe od 0 do 15, tylko że znakowanie jest troche inne, czyli 0 = 0000, 1 = 0001 [...] A(czyli 10) = 1010 i kolejno alfabetycznie do 15

więc mamy 0011,0111 i sprawdzamy po kolei osobno, czyli 0011 = 3 a 0111 = 7, czyli liczba dziesiętna = 55 w szestnastkowym będzie wynosiła 37

proces w 2 strone wygląda prawie tak samo

 

 

 

co ci się przyda? znajomość tablic i pętlii chyba cmath

Opublikowano

Wiem jak to działa, ale chodzi jak to zapisać w c++ aby liczyło nie wykorzystując funkcji hex , dec itp.

Opublikowano

dziesiętna do binarnej

#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
int binary[10]= {512,256,128,64,32,16,8,4,2,1};
string dzietobin(int dzie){
    string bin;
    bool start = false;
    for(int i = 0; i < 10; i++ )
        {
    if (start)
    {
        if(dzie-binary[i] >= 0)
        {
            dzie -= binary[i];
            bin += "1";
        }
        else
            bin += "0";
    }
    else
    {
        if(dzie-binary[i] >= 0)
        {
            start = true;
            dzie -= binary[i];
            bin += "1";
        }
    }
   // cout << binary[i] << endl;
}
    return bin.c_str();
}






int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    cin>>i;
cout << dzietobin(i) << endl;
cin>>i;
    return 0;
}
 

spróbuj sam zrobić teraz z bin do 10, no i reszte, a jak problemy z czymś to pisz

@down

ale działczy :D

Opublikowano

#include <algorithm>
#include <iostream>
std::string bin(int liczba)
{
    std::string wynik;
    for(int i = 1; liczba >= i; i <<= 1)
        wynik += static_cast<char>(((liczba & i) != 0) + '0');
    std::reverse(wynik.begin(), wynik.end());
    return wynik;
}

std::string hex(int liczba)
{
    std::string wynik;
    for(int i = 0xF; liczba != 0; liczba >>= 4)
        wynik += static_cast<char>(((liczba & i)) + '0' + 7 * ((liczba & i) > 9));
    std::reverse(wynik.begin(), wynik.end());
    return wynik;
}
//lub analogicznie do powyzszej
//std::string bin(int liczba)
//{
//    std::string wynik;
//    for(int i = 0x1; liczba != 0; liczba >>= 1)
//        wynik += static_cast<char>((liczba & i) + '0');
//    std::reverse(wynik.begin(), wynik.end());
//    return wynik;
//}

int main()
{
    std::string liczbaWBinarnym = hex(256);
    std::cout << liczbaWBinarnym;
    return 0;
}
 

 

 

 

ładniejsze i zgrabniejsze niż up

Opublikowano

ewentualnie, jeśli chcesz przekształcić string, tj. np.

"abc" w "616263", to łap:

string string_to_hex(const string& input)
{
    static const char* const lut = "0123456789ABCDEF";
    size_t len = input.length();

    string output;
    output.reserve(2 * len);
    for (size_t i = 0; i < len; ++i)
    {
        const char c = input[i];
        output.push_back(lut[c >> 4]);
        output.push_back(lut[c & 15]);
    }
    return output;
}


int main(){
cout << string_to_hex("abc");
return 0;

}


 

Opublikowano

Przecież jemu nie o to chodzi....

 

Co do tematu to używając printf:

printf("%x", 12345); pokaże ci się w hex (3039) i w drugą stronę:

printf("%d", 0xff); pokaże ci w decymalnym (dziesiętnym: 255)

/ GA-970A-UD3 / FX-6300 / Sapphire Xtreme 5830 / OCZ ZS 550W / Brutus M23 /

| MPC Coders Team | MPC Gold Member | C#, C++, PHP, (N)ASM, AutoIT, Python, Java |

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...