2011-01-11 13 views
0

Was ist der Unterschied zwischen std::cout<<std::setbase(8)<<32; und std::cout<<std::oct<<32; sie gleichwertig sind?setBase (8) und std :: cout << std :: Oktober

Und auch, was ist der Zweck der std::cout.oct ??

+1

Ich kann nicht glauben, dass sie enthalten 'oct' aber nicht' bin' –

+0

@Charles Salvia: Octal Ausgabe/Incput seit Beginn mit C hat. Binary Output/Input scheint redundant zu sein, da es einen einfachen Übergang zu Oct (3 Binärziffern) oder Hex (4 Binärziffern) gibt. –

+0

Ich stimme immer noch mit Charles überein, dass es nett wäre, wenn es eine Bin-Flagge gäbe. Es macht Bit-Bashing und Bit-Maske verwandte Arbeit viel einfacher zu debuggen. – GWW

Antwort

1

Std :: Okt Legt das Flag für das Basisfeldformat für den str-Stream auf oct fest.

std :: setbase Legt das Flag für das Basisfeldformat auf einen der möglichen Werte fest: hex, dez oder oct, abhängig vom Wert des Basisparameters.

Ich denke, der große Unterschied ist, dass setBase ein Argument nimmt, so dass Sie eine Variable mit der numerischen Basis, die Sie wollen passieren könnte. Anstatt eine Menge if-Anweisungen zu haben, um die Variable zu überprüfen und dez, oct oder hex zu verwenden. obwohl

Ich bin nicht sicher über std :: cout.oct.

+0

Wäre es nicht ein Fehler sein std :: cout.oct zu benutzen? – GWW

+2

'std :: ostream :: oct' kann als Maske verwendet werden, um zu prüfen, ob das' oct' Bit gesetzt ist. Wie: 'if (std :: cout.flags() & std :: cout.oct)'. Dagegen ist "std :: oct" einfach eine IO-Stream-Manipulatorfunktion, die in einen Stream eingefügt werden soll. –

+0

Ah cool danke. – GWW

Verwandte Themen