如何理解以下c ++代码?

时间:2010-09-20 16:20:59

标签: c++

inpfile>>ch;

if(ch<16) outfile<<"0×0"<<std::hex<<setprecision(2)<<(int)ch<<" ";

std::hex<<setprecision(2)是什么意思?

4 个答案:

答案 0 :(得分:2)

iostream可以操作来实现所需的格式化 - 这可以通过乍看起来像输出预定义值来完成,如我们的主题代码行所示。< / p>

std::hex在base16中显示以下整数值。

setprecision设置显示以下浮动值的精度。

关于操纵者的更多信息,启动here

答案 1 :(得分:1)

  

std::hex<<setprecision(2)是什么意思?

std::hexstd::setprecision都是所谓的操纵者。应用于流(通过输出它们),他们操纵流,通常是为了改变流的格式。特别是,std::hex操纵流以使值以十六进制写入,std::setprecision(x)操纵它以输出x位数字。
(你可能已经知道的一个相当流行的操纵者是std::endl。)

正如你所看到的,有些操纵者会接受参数,而那些不接受参数的操纵者。此外,大多数(原则上所有)操纵器都是粘性的,这意味着它们对流的操纵会持续到显式更改为止。 Here 是关于此主题的广泛讨论。

答案 2 :(得分:1)

这一行与:

相同
char  ch;
inpfile>>ch;

if(ch<16)
{
    outfile     << "0×0"             // Prints "0x0" (Ox is the standard prefix for hex numbers)
    /*outfile*/ << std::hex          // Tells the stream to print the next number in hex format
    /*outfile*/ << setprecision(2)   // Does nothing. Presumably they were trying to indicate print min of 2 characters
    /*outfile*/ << (int)ch           // Covert you char to an integer (so the stream will print it in hex
    /*outfile*/ << " ";              // Add a space for good measure.
}

而不是setprecision(2)可能的意图是setw(2)&lt;&lt; setfill( '0')

答案 3 :(得分:0)

std::hex将输出基数设置为十六进制。

setprecision对此行没有影响,因为它仅影响浮点数。