x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Prevod z 10 do 2 sústavy - C / C++ - Fórum - Programujte.comPrevod z 10 do 2 sústavy - C / C++ - Fórum - Programujte.com

 

Eddy777
Duch
21. 2. 2012   #1

Zdravím.Chcem previesť číslo 45967 z dekadického ,do binárneho tvaru.Robil som to systémom ,kde som hľadal vždy zvyšok po delení číslom 2. Dostal som výsledok ,ale v opačnom poradí.Mohli by ste mi poradiť ,ako by som mal tie čísla usporiadať opačne? Som úplný začiatočník..... tu je môj kód.

#include <stdio.h>
#include <conio.h>
int main()
{
    int a = 45967;
    int b;
    int c;
    do{
        a = a / 2;
        printf("\n");
        printf("%d",a);
        printf("\t");
        printf("%d",b = a % 2);
    }while(a >= 1);
    getch();
    return 0;
}
---  
Nahlásit jako SPAM
IP: 91.127.211.–
Reklama
KIIV
Hero
21. 2. 2012   #2

je nekolik moznosti...

ukladat do pole a to pak vypsat opacne

ukladat do pole opacne a pak vypsat

moje oblibene: ukladat do retezce odzadu a pak vypsat

....

mimochodem mam pocit ze ti ten program ted nepocita spravne.. zbytek po deleni musis dostat pred tim nez cislo vydelis 2

---  
Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
22. 2. 2012   #3

#1 Eddy777
Alebo niečo takéto by mohlo fungovať, potom to stačí prekonvertovať zo stringu na integer...

string decToBin(int number) {
  if(number == 0) return "0";
  if(number == 1) return "1";
  
  if(number%2 == 0) return decToBin(number / 2) + "0";
  else return decToBin(number / 2) + "1";
}
---  +1 Zajímavé
Nahlásit jako SPAM
IP: 91.127.240.–
vitamin
Stálý člen
22. 2. 2012   #4

i<<=1i<<=1i<<=1#1 Eddy777
Cisla su ulozene v binarnom tvare, printf ich ale zobrazuje ako dekadicke. V podstate ti staci zistit sposob ako pristupovat k jednotlivym bitom. Ak ti staci zobrazovat jednotlive bity tak sa to da spravyt aj bez poli.

int a = 666;

//zacina od najnizsej vahy
for(unsigned i = 1; i; i*=2){ //i<<=1
	if(i <= (unsigned)a){
		if(a & i)putchar('1');
		else putchar('0');
	}
	else break;
}
	
putchar('\n');

//zacina od najvyzsej vahy
for(unsigned i = (1 << (sizeof(unsigned)*8-1)); i; i/=2){ //i>>=1
	if(i <= (unsigned)a){
		if(a & i)putchar('1');
		else putchar('0');
	}
}
---  +1 Zajímavé
Nahlásit jako SPAM
IP: 178.143.60.–
22. 2. 2012   #5

ako nacrtol uz vitamin, ostal by som v tej bitovej "vrstve"...ziadne modulo alebo podobne, stacia len bitove posuny a &...
ukladat to alebo priamo vypisovat by nemal byt problem, nejake sposoby tu uz su...

---  
Nahlásit jako SPAM
IP: 147.229.206.–
Eddy777
Duch
29. 2. 2012   #6

Zdravím, vybral som si metódu pri ktorej výsledok hodím do poľa ,a to pole potom vypíšem z opačnej strany (potrebujem sa naucit pracovat s polami) .... Hadzem sem zdrojak,pretoze mi to nejde otocit a neviem co robim zle.

#include <stdio.h>
#include <conio.h>
int main()
{
    int a = 45967;
    int b;
    int c;
    int i;
    int pole[c];
    c = 0;
    
    while(a >= 1){
        a = a / 2;
        printf("\n");
        b = a % 2;
        printf("%d",b);
        pole[c] = b;
        
    }
    printf("\n");
    b = i;
    for(i=c-1; i>=0; i--){ 
        printf("%d", pole[i]);
    }    
    getch();
    return 0;
}
---  
Nahlásit jako SPAM
IP: 78.99.59.–
KIIV
Hero
29. 2. 2012   #7

int pole[c];  - c musi byt znamo a konstantni v dobe prekladu - to nesplnujes ani nahodou

dejme tomu ze mas vstupni cislo jako integer - pak integer muze mit na 32bitovem procesoru 32bitu (a jeden bit je znamenko)

proc si proste neudelat pole:  char pole[33] = {0};

---  
Nahlásit jako SPAM
IP: 94.112.32.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin
Stálý člen
1. 3. 2012   #8

#6 Eddy777
Mas tam aj zopar logickych chyb. 

Premenna c ma pocas celeho programu hodnotu 0, cize si prepisujes len prvy "bit" v pole[]. Tak ako napisal KIIV, velkost pola musi byt znama pri preklade (ak allokujes na stacku). Je zbytocne alokovat pole int-ov ked potrebujes uchovavat len hodnotu 0 a 1. Dalej ignorujes zaporne hodnoty. Pouzivas zbitocne vela premennych, napr premenna 'b' a 'c' je uplne zbytocna. A hlavne:

KIIV

mimochodem mam pocit ze ti ten program ted nepocita spravne.. zbytek po deleni musis dostat pred tim nez cislo vydelis 2

---  
Nahlásit jako SPAM
IP: 178.143.60.–
Doomista
Návštěvník
5. 3. 2012   #9

1) <bitset.h> a UTFG

2) pokud mám v desítkové nějaké číslo, řekněme 1555, ověříme zda je liché (ANO), pokud ano poslední číslo v binárce je 1, pak základní číslo vydělíme dvěma a usekneme zbytek. Máme 777. Opět je liché, předposlední číslo je 1. Vydělíme dvěma - 388, je sudé, poslední trojčíslí je 011, vydělíme - 194 => 0011, dělíme - 97 => 10011, dělíme - 48 => 010011, dělíme - 24 => 0010011, dělíme: 12 => 00010011, dělíme: 6 => 000010011, dělíme: 3 => 1000010011, dělíme: 1 => 11000010011. Taky možnost, co?

---  
Nahlásit jako SPAM
IP: 83.240.1.–
Zjistit počet nových příspěvků

Nápověda: Označení konkrétního příspěvku jako řešení

Najeď na příspěvek, který obsahuje řešení, rozbal nabídku možnosti (dle obrázku) a klikni na Označit jako řešení.

Přidej příspěvek

Vložení zdrojového kódu

Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek na disku:

Vložení videa

Vlož URL adresu videa:
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
x
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj toto vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními (pošleme ti mejl).
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé: 0 registrovaných, 32 hostů

Podobná vlákna

Vlákno
Diskuze

Prevod z hexadecimalnej sustavy - založil street punk

Ciselne sustavy - založil devilfish

C# převod - založil Pavel Suchý

 

Hostujeme u Českého hostingu  |  ∆ Nahoru  |  ISSN 1801-1586 Webtea.cz logo © 20032012 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý