ASCII文字セットを表すために単一のintを使用する場合、それをどのように使用すると、ストレージスペースが8分の1に削減されますか?256ブール値の配列と比較して?単一のintもビットベクトルのように機能しています。
javaのブール値は、trueまたはfalseの値しか表せないため、1ビットを占有します。たとえば、ブール値の配列がある場合。boolean [] char_set = new boolean [256]これは256ビットを占有しますか?私が読んでいるのは、ビットベクトルのような単一のintを使用する場合、つまり32ビットを使用して256の値をカバーできるということです。それは8分の1の削減だと思います。しかし、なぜ以下のコードが機能するのでしょうか。
文字列に重複があるかどうかをチェックしています。彼らはアスキー文字セットを想定しています。Strは文字列です。
int checker = 0;
for(int i=0;i<str.length();i++)
{
int val = str.charAt(i) - 'a';
if(checker& (1<<val)) > 0)
{
return false;
}
checker |= (1<<val);
}
return true;
}
この場合、ビットベクトルロジックがどのように機能するかを誰かが特に説明できますか?文字列に小文字が含まれていることを前提としています。