CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Liczby w kodzie U2

Liczby w kodzie U2

dział ogólny

Liczby w kodzie U2

Nowy postprzez kuba_444 » piątek, 18 maja 2012, 09:01

Witam
jestem nowy na forum, wiec proszę o wyrozumiałość. Od niedawna znam C++, mam środowisko Borland C++Builder 6.0.
Szukałem w internecie ale nie mogę znaleźć, więc mam do was pytanie czy istnieje funkcja zamieniająca liczbę z systemu dziesiętnego na system U2 i w druga stronę z U2 na dziesiętny. Nie chce linków do wikipedi, bo wiem na czym polega zamiana. Chodzi mi o konkretne funkcje czy istnieją, bo wydaje mi się że U2 to jest jeden z podstawowych systemów do zapisu liczb w programach, bo same procesory pracują na liczbach zero-jedynkowych.
Z góry dziękuj
Avatar użytkownika
kuba_444
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): niedziela, 29 kwietnia 2012, 22:30
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Liczby w kodzie U2

Nowy postprzez Cyfrowy Baron » piątek, 18 maja 2012, 09:23

Chodzi Tobie o coś takiego: :?:

KOD cpp:     UKRYJ  
#include <stdlib.h>

String IntToBin(long int Value)
{
 int p;
 String bin = "";
 String Result;
 if(Value == 0) return "0";

 for(int x = 1; x < (8 * sizeof(Value)); x++)
 {
  if((Value % 2) == 0)
   bin = "0" + bin;
  else
   bin = "1" + bin;
  Value = Value >> 1;
 }
 bin.Delete(1, (8 * bin.Pos("1") - 1) / 8);
 Result = "0" + bin; //jeżeli nie chcemy 0 na początku ten fragment należy zmienić na: Result = bin;
 return Result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  Edit1->Text = IntToBin(12);
}
//---------------------------------------------------------------------------
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Liczby w kodzie U2

Nowy postprzez kuba_444 » piątek, 18 maja 2012, 10:04

Nie dokładnie, miałem bardziej na myśli:
KOD cpp:     UKRYJ  
float dec="-13,56";
float u2;

u2=DecToU2(dec);


a druga funkcja:
KOD cpp:     UKRYJ  
float dec;
float u2="101101,01001";

dec=U2ToDec(u2);


Chodzi mi o to,żeby przyjmował liczby dodatnie, ujemne i przeliczał zarówno to co jest przed przecinkiem jak i po.

PS. Ale to co przesłałeś też mi się przyda, bo ja na razie bardziej jestem zorientowany w C++ konsolowym, a obiektowy się dopiero uczę i też szukałem jak robić funkcje w obiektowych.
Avatar użytkownika
kuba_444
Bladawiec
Bladawiec
 
Posty: 2
Dołączył(a): niedziela, 29 kwietnia 2012, 22:30
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: Liczby w kodzie U2

Nowy postprzez Cyfrowy Baron » piątek, 18 maja 2012, 10:54

kuba_444 napisał(a):float dec="-13,56";


Zapis nieprawidłowy. W cudzysłowie umieszczamy tylko łańcuchy znaków a nie liczby. Poza tym podając w kodzie liczbę zmiennopozycyjną zawsze używamy kropki nie przecinka. Powinno być:

KOD cpp:     UKRYJ  
float dec = -13.56;




kuba_444 napisał(a):float u2="101101,01001";


Ten zapis również jest nieprawidłowy - cudzysłowie. Poza tym wartość binarną należałoby tutaj zapisać raczej w zmiennej typu String, a nie float. Poza tym -13 to w zapisie dwójkowym ma chyba wartość: 1111111111111111111111111111111111111111111111111111111111110011 a nie 101101?!



kuba_444 napisał(a):Chodzi mi o to,żeby przyjmował liczby dodatnie, ujemne i przeliczał zarówno to co jest przed przecinkiem jak i po.


No cóż brak Tobie doświadczenia w programowaniu obiektowym, więc pewnie dlatego nie potrafiłeś zmodyfikować podanego kodu.

KOD cpp:     UKRYJ  
String IntToBin(int Value)
{
 int p;
 String bin = "";
 String Result;
 if(Value == 0) return "0";

 for(int x = 1; x < (8 * sizeof(Value)); x++)
 {
  if((Value % 2) == 0)
   bin = "0" + bin;
  else
   bin = "1" + bin;
  Value = Value >> 1;
 }
 bin.Delete(1, (8 * bin.Pos("1") - 1) / 8);
 Result = "0" + bin; //jeżeli nie chcemy 0 na początku ten fragment należy zmienić na: Result = bin;
 return Result;
}
//---------------------------------------------------------------------------
String DecToU2(double Value)
{
 String sd = FloatToStrF(Value, ffNumber, 7, 2); // 2 - z dokładnością d dwóch miejsc po przecinku
 int xPos = sd.Pos(",");

 int d1 = sd.SubString(1, xPos - 1).ToInt();
 int d2 = sd.SubString(xPos + 1, sd.Length()).ToInt();

 return IntToBin(d1) + "," + IntToBin(d2);
}
//---------------------------------------------------------------------------
String DecToU2(long int Value)
{
 return IntToBin(Value);
}
//---------------------------------------------------------------------------
String DecToU2(int Value)
{
 return IntToBin(Value);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  float decF = -13.35;
  Edit1->Text = DecToU2(decF);

  int decI = -13;
  Edit2->Text = DecToU2(decI);
}
//---------------------------------------------------------------------------


Jak widzisz są tutaj trzy przeciążone funkcje, więc to które funkcja zostanie wywołana zależy od tego, jakie przekażesz jej wartości poprzez argumenty funkcji.



Co się tyczy konwersji w drugą stronę, to tak na szybkiego mogę zaproponować coś takiego:

KOD cpp:     UKRYJ  
int BinToInt(String Value)
{
 int ValueSize, Result;
 Result = 0;
 ValueSize = Value.Length();

 for(int i = ValueSize; i > 0; i--)
  if(Value.SubString(i, 1) == "1")

 Result = Result + (1 << (ValueSize - i));
 return Result;
}
//---------------------------------------------------------------------------
double U2ToDec(String Value)
{
 int xPos = Value.Pos(",");
 if( xPos == 0 ) return BinToInt(Value);

 int d1 = BinToInt( Value.SubString(1, xPos - 1) );
 int d2 = BinToInt( Value.SubString(xPos + 1, Value.Length()) );

 return ((String)d1 + "," + (String)d2).ToDouble();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 Edit1->Text = U2ToDec( "10011,1101" );
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 7 gości

cron