まくまくC/C++ノート
ビット演算で小文字と大文字を変換する
2011-12-17

ASCII コードの AZaz は以下のような配置になっています。

A(01000001) ~ Z(01011000)
a(01100001) ~ z(01111000)

つまり、6 番目のビット (10進数で32) が 1 ならば大文字、0 ならば小文字になります。 これを利用して、ビット演算で大文字と小文字の変換を行うことができます(32 を足し引きしても同じことができます)。

例: 全て小文字に変換

char str[] = "HelloWorld";
int n = strlen(str);
for (int i = 0; i < n; ++i) {
    str[i] |= 0x20;
}
cout << str << endl;

例: 全て大文字に変換

for (int i = 0; i < n; ++i) {
    str[i] &= ~0x20;
}
cout << str << endl;

例: (おまけ)大文字と小文字の反転 (XOR)

for (int i = 0; i < n; ++i) {
    str[i] ^= 0x20;
}
cout << str << endl;
2011-12-17