Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » vorzeichenbit

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
03.11.2003, 21:14 Uhr
~Mon3d
Gast


hallo liebe leute

ichhab da mal ne frage ..
ich soll das vorzeichenbit ein int zahl ausgeben lassen..

das einzige was mir dazu einfällt ist

C++:
#include<iostream>

int main() // --edit: Pablo ich habe void main zu int main gewechselt :!:
{
   int a,b;
   cin >> a;
   b=a << 32;
   cout << b;

}



aber so recht funzt das nciht ...

kann mir woll jemadn helfen???

dankle mon3d

--edit: Pablo. [ cpp ] tags gesetzt --

Dieser Post wurde am 03.11.2003 um 21:18 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.11.2003, 21:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na wenn die zahl kleiner null ist dann ist das vorzeichen bit 1 an sonsten 0
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.11.2003, 21:24 Uhr
virtual
Sexiest Bit alive
(Operator)


@Pablo
Bitte nicht Posts anderer Leute inhaltlich verändern. Das ist ganz schlechter Stil. Auch wenn der Inhal falsch sein sollte.

@Mon3d
Also letztlich dürfte sogar sowas ausreichen d sein:

C++:
int main()
{
    int a;
    cin>>a;
    cout<<(a<0)<<std::endl;
}


Eine wirklich immer funktionierende Lösung ist das.
Ein andere richtig funktionierende Lösung wäre deutlich komplizierter, weil die Größe eines ints, und damit die Anzahl der Bits, von System zu Sytsem variiert. Wenn wir mal annehmen, daß Du wirklich einen Rechner mit 32 Bittigen Ints hast, dann wäre eine Lösung:

C++:
int main()
{
    int a,b:
    cin>>a;
    b = a>>31; // b ist jetzt -1 oder 0
    b = -b; // b ist jetzt 1 oder 0
    cout << b;
}


Mit anderen Worten: Du hast in die falsche Richtung und ein Bit zuviel verschoben, denke ich mal.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.11.2003, 21:25 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
der vergleich mit >=0 sollte doch schneller gehen als das shiften oder?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.11.2003, 21:26 Uhr
~mon3d
Gast


das prob an der ganze sache ich das ich das über << bzw >> machen muss d.h ich ich muss das vorzeige bit ausleses lassen...

einfach per

if (zahl <0)
cout << "1";
....
kan ich das leider nciht machen

bei dem ober prog


#include<iostream>

int main() // --edit: Pablo ich habe void main zu int main gewechselt
{
int a,b;
cin >> a;
b=a << 32;
cout << b;

}

gibt er mir bei negative zahle ein -1 raus bei positive ein 0...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.11.2003, 21:28 Uhr
~mon3d
Gast


ich probiere es mal ..vielen dank....

ich hab meine letzten haare gerettet
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.11.2003, 21:29 Uhr
Pablo
Supertux
(Operator)



C++:
#include <iostream>
#define abs(x) x<0 ? -x : x
int main()
{
   int a,b;
   std::cin >> a;
   b = a>>31;
   b=abs(b);
   std::cout << b << std::endl;
   return 0;
}



Bei kommt es 0 wenn positiv, 1 wenn negativ.


Bearbeitung:
Mist! @virtual war wohl schneller!


Bearbeitung:
Du könntest eine Bitmaske benutzen, mit 1000000000000000000000000 blabla und b=a&1000000000000···0. Das wäre eine andere Möglichkeit, ich hab sie aber nicht getestet.

--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 03.11.2003 um 21:38 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.11.2003, 21:31 Uhr
0xdeadbeef
Gott
(Operator)


Was auch geht, ist

C++:
int a;
//...
int vorzeichen = -(a>>(sizeof(int) * 8 - 1));


Aber a<0 ist die imho stilistisch sauberere Lösung.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 03.11.2003 um 21:32 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.11.2003, 21:33 Uhr
virtual
Sexiest Bit alive
(Operator)


@windalf
Platformabh.
@pablo:
In der C++ Welt sind Macros eine schlechte variante. Ersetze einfach

C++:
#define abs(x) ...


durch

C++:
#include <algorithm>


Weiterhin eine Preisfrage: Was ist schlecht an

C++:
#define abs(x) x<0 ? -x : x


In der C Welt? (Tip: Sechs Zeichen fehlen!)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.11.2003, 21:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@virtual
versteh ich überhaupt nicht was daran plattformabhängig sein soll
verstehst du unter plattform das os oder die hardwarearchitektur?

zu deinem marco würd ich sagen da fehlen die klammern
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 03.11.2003 um 21:35 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: