Cでビット単位のAND(&)を逆にする方法は?
たとえば、Cで次のような操作を行います。
((unsigned int)ptr & 0xff000000))
結果は0xbf000000
です。現時点で必要なのは、上記を逆にする方法、つまりptr
、操作の結果を使用して決定する方法0xff000000
です。
これをCで実装する簡単な方法はありますか?
Cでビット単位のAND(&)を逆にする方法は?
たとえば、Cで次のような操作を行います。
((unsigned int)ptr & 0xff000000))
結果は0xbf000000
です。現時点で必要なのは、上記を逆にする方法、つまりptr
、操作の結果を使用して決定する方法0xff000000
です。
これをCで実装する簡単な方法はありますか?
ビット単位&
を元に戻すことはできません。
0 & 1 = 0
0 & 0 = 0
情報(つまりビット)を捨ててしまったため、それを行うことはできません。どこからでも情報を取り戻すことはできません。
AND
(&
)とOR
(|
)の両方が破壊的であることに注意してください。可逆的なブール演算はXOR
(^
)とNOT(~
)のみです。
不可能。ビット単位の&0xff000000は、不可逆演算です。下位24ビットは永久に失われます。
XORは非破壊的であるため、元に戻すことしかできません。
ORとANDはどちらも破壊的です。