C-ben hogyan lehet egy decimális számot kettes számrendszerbe átváltani?
A feladat a pl. 23 átváltása kettes számrendszerbe, úgy, hogy a megjelenő szöveg kb. ez legyen :
Tízes: 23
Kettes: 10111
És a csavar:
Csak alapműveleteket lehet hasznalni.
Ezért meg van szabva, hogy a megadott szám max 255 lehet, és lehetnek "segéd" nullák is a kapott bináris szám elején.
Ha csak pozitív számok lehetnek 0 és 255 között, és nem gond a vezető nullák, akkor az egyik legegyszerűbb pl.
void dec2bin(unsigned int d) {
unsigned int m;
for (m=128; m>0; m>>=1) printf(m&d?"1":"0");
printf("\n");
}
// dec2bin(18);
"Nem lehet benne ciklus, elágazás, tömb"
Ja bocs, ezt csak most olvastam, akkor a fenti mégsem jó.
Tessék válogass (és tanuld meg használni a Google-t):
Ha az alábbiak a kritériumok:
* "A feladat a pl. 23 átváltása kettes számrendszerbe"
* "Nem lehet benne ciklus, elágazás, tömb"
* "a megadott szám max 255 lehet, és lehetnek "segéd" nullák is a kapott bináris szám elején"
akkor szépen, egyenként végig kell menni a kettes számrendszer beli helyiértékeken: 2^7-től (128-tól), 2^0-ig (1-ig) és el kell osztani vele a számot - ez adja a bináris számjegyet - illetve maradékos osztást kell végezni vele - ez adja a decimális szám új értékét,
Bővebben:
Vagy a fenti példámat szétbontva:
void dec2bin(unsigned char d) {
unsigned char m = 128;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf(m&d?"1":"0"); m>>=1;
printf("\n");
}
// dec2bin(23);
#10/#15/#16: A kedves kérdező #5-ös hozzászólásában leírta, hogy: "Nem lehet benne ciklus, elágazás, tömb" így rövid formában, feltételes operátor ( [link] ) formájában sem, így ez nem akceptálható megoldás sajnos (pedig egy megoldásnak jó!). ;>(
Feltételezem a feladat arra szolgál, hogy leellenőrizze, hogy a nebuló érti-e a decimális->bináris számrendszerek közötti átváltást "manuálisan" (év elején vagyunk így ilyen kis "béna" feladatok adása elképzelhető). ;>/
#include <stdio.h>
#include <string.h>
char * dec2bin(unsigned char d)
{
static char dec2bin_buffer[9];
unsigned char m = 128;
unsigned char c = 7;
char s[2];
char r[9] = "";
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s); m>>=1;
sprintf(s, "%u", (m&d)>>c--); strcat(r, s);
strcpy(dec2bin_buffer, r);
return dec2bin_buffer;
}
int main()
{
unsigned char d = 23;
printf("%d = %s\n", d, dec2bin(23));
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!