C++IO类管理流状态的问题

各位前辈,最近我读到Prime5中关于流状态的一段文字和代码感到很疑惑

“带参数的clear版本接受一个iostate值,表示流的新状态。为了复位单一的条件
状态位,我们首先应用rdstate读出当前条件状态,然后用位操作将所需位复位来生成新的状态。例如,下面代码将failbit和badbit复位,但eofbit保持不变。
cin.clear(cin.rdstate()&~cin.failbit&~cin.badbit)";”
不知道哪位前辈能帮我解释下这段代码,由于只是有限,我知道rdstate函数是用来返回流状态,比如当cin.rdstate()返回0(即ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或操作。
然后我知道,
cin.goodbit,返回0
cin.eofbit返回1
cin.failbit返回2
cin.badbit返回4
那么上面那段 cin.rdstate()返回的是什么数?它是怎么讲failbit和badbit复位的?
可以用二进制数表示出来吗?

将原来的状态,和要改变的位(其它位为1)按位求与,得到新值