为什么设置标志操纵器后位集会减少?
why bits sets are decreased after setting flag manipulator?
1
代码
#include<iostream>
#include<bitset>
int main()
{
std::ios_base::fmtflags flag=std::ios::showpos;
std::cout<<std::cout.flags()<<"\n";
std::cout<<flag<<"\n";
std::cout.flags(flag);
std::cout<<std::cout.flags()<<"\n";
std::cout<<59.20<<"\n";
std::cout<<std::bitset<16>(4098)<<"\n";
std::cout<<std::bitset<16>(2048)<<"\n";
}
输出
4098
2048
+2048
+59.2
0001000000000010
0000100000000000
看到这里我设置了 showpos
标志操纵器,然后我返回 cout.flags()
的值(当前格式设置)减少了位集。
2
代码
#include<iostream>
#include<bitset>
int main()
{
std::cout<<std::cout.flags()<<"\n";
std::cout<<std::showpos;
std::cout<<std::cout.flags()<<"\n";
std::cout<<59.20<<"\n";
std::cout<<std::bitset<16>(4098)<<"\n";
std::cout<<std::bitset<16>(6146)<<"\n";
}
输出
4098
+6146
+59.2
0001000000000010
0001100000000010
这里正如预期的那样,位设置值增加了 1
,因为我添加了一个标志操纵器。
为什么当我借助 cout.flags()
功能位集设置标志时减少而不是增加?
flags
function 采用新值,而不是要添加的标志。您正在做的是用 showpos
.
完全替换标志
如果要用flags
做,需要自己加flag:
std::cout.flags(std::cout.flags() | std::ios::showpos);
1
代码
#include<iostream>
#include<bitset>
int main()
{
std::ios_base::fmtflags flag=std::ios::showpos;
std::cout<<std::cout.flags()<<"\n";
std::cout<<flag<<"\n";
std::cout.flags(flag);
std::cout<<std::cout.flags()<<"\n";
std::cout<<59.20<<"\n";
std::cout<<std::bitset<16>(4098)<<"\n";
std::cout<<std::bitset<16>(2048)<<"\n";
}
输出
4098
2048
+2048
+59.2
0001000000000010
0000100000000000
看到这里我设置了 showpos
标志操纵器,然后我返回 cout.flags()
的值(当前格式设置)减少了位集。
2
代码
#include<iostream>
#include<bitset>
int main()
{
std::cout<<std::cout.flags()<<"\n";
std::cout<<std::showpos;
std::cout<<std::cout.flags()<<"\n";
std::cout<<59.20<<"\n";
std::cout<<std::bitset<16>(4098)<<"\n";
std::cout<<std::bitset<16>(6146)<<"\n";
}
输出
4098
+6146
+59.2
0001000000000010
0001100000000010
这里正如预期的那样,位设置值增加了 1
,因为我添加了一个标志操纵器。
为什么当我借助 cout.flags()
功能位集设置标志时减少而不是增加?
flags
function 采用新值,而不是要添加的标志。您正在做的是用 showpos
.
如果要用flags
做,需要自己加flag:
std::cout.flags(std::cout.flags() | std::ios::showpos);