Archiv verlassen und diese Seite im Standarddesign anzeigen : Dualzahlen nach Dezimalzahlen umwandeln
Hallo,
kennt jemand eine Funktion unter C mit der man Dualzahlen nach Dezimalzahlen umwandeln kann?
Wenn nicht hat evtl. jemand eine Idee wie man das machen kann?
Gruß
Konstantin
Dualzahl == Binärzahl?
Bischi
PS: Selber schreiben:
int summe=0;
for (i=0; i<= vorderste Ziffer; i++){
if(aktuelleZiffer ==1){
summe=summe+2^i;
}
}
2^i wäre 2 XOR i...
Besser:
int zahl = 0;
// Annahme: Zahl ist in str gespeichert
for(int i=0;i<strlen(str); i++) {
if (str[i] == '1')
zahl |= 1; // += 1 würde auch gehen, |= ist aber "korrekter"
zahl <<= 1;
}
Am einfachsten und besten ist es natürlich, gleich strtol zu nehmen:
long int zahl;
zahl = strtol(str, NULL, 2);
2^i wäre 2 XOR i...
Seit wann den das? Bei mir heisst das immer noch 2 hoch i... (ich mein: Wer hat denn behauptet, dass das, was da steht, c oder c++ ist? Das ist ja das schöne an Pseudo-Code...)
MfG bischi
PS: Bist du sicher, dass das XOR ist? Denn: 2^3 = 0. Exklusiv-oder würde ja bedeuten, dass ne 1 kommen müsste?! Oder ist hier 0 einfach true? Ich hab da jeweils ein riesiges Chaos - wann 1 true und wann 0 true...
Denn: 2^3 = 0.Bei mir kommt 1 raus...
main(){int i=2^3;printf("%i",i);}
Jaja - gibt ja ne eins... Hab mich vertippt - da stand auf einmal 3^3 da...
MfG Bischi
PS: Wo wir grad dabei sind: Wie rechne ich jetzt in c++ 2^3 richtig aus (also 2 hoch 3 wie dus in maple und co schreiben würdest?). Hab schon ne weile nicht mehr c++ geproggt...
peschmae
05-01-2006, 21:27
in C/C++ gibts dafür die Funktion pow und Abarten:
double pow(double x, double y);
float powf(float x, float y);
long double powl(long double x, long double y);
In C++ wurde die pow(double, double) zumindest fürn pow(double, int) auch noch überladen.
Ich frag mich allerdings immer noch was der OP eigentlich genau will.
MfG Peschmä
Naja - jetzt hab ichs halt schnell geproggt:
#include<iostream>
//Pre: hoch ist nicht negativ
//Post: gibt tief ^ hoch zurück
int pow(int tief, int hoch)
{
int result=tief;
if(hoch <=0){
return 1;
}
for(int i=hoch-1; i >0; i--){
result = result*tief;
}
return result;
}
int main()
{
int output=0;
int input=0;
int counter=0;
std::cout << "geben sie eine Binär-zahl ein:"<<std::endl;
std::cin >> input;
int actualDigit=0;
while(true){
actualDigit=input%10;
//Falsche Eingabe
if(actualDigit>=2){
std::cout << "error"<< std::endl;
break;
}
if(actualDigit==1){
output=output + pow(2,counter);
}
input = (input-actualDigit)/10;
counter++;
//Ende
if(input==0){
break;
}
}
std::cout << "Das resultat ist: " << output << std::endl;
return 0;
}
MfG Bischi
pow ist natürlich schon eingebaut, und deine Methode geht natürlich auch, normalerweise berechnet man es allerdings so (schneller)
unsigned int mypow(unsigned int a, unsigned int b)
{
int res = 1;
while (b != 0) {
res *= res;
if (b&(1<<31)) {
res *= a;
}
b<<=1;
}
return res;
}Man zerlegt
a^b = a^(b_n*2^n + b_{n-1}*2^(n-1) + ... + b_1 * 2 + b_0) = ((a^(b_n))^2 * a^(b_{n-1}))^2 * ...
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.