C 大小寫轉換 與 位運算的 操作

2021-08-19 20:47:41 字數 694 閱讀 2215

c/c++ 中可以使用 isalpha (是否為字母),isdigit(是否為數字),islower(是否小寫),isupper(是否大寫),isalnum(是否為英文或數字) ,同時對於字母也可以使用 tolower 、toupper 進行大小寫轉換

/*大小寫轉換*/

int main()

}

最近看到乙個很有趣的轉換方式

我們可以通過 ascii 碼表看出,大小寫字母數值上相差了 32 ,一般我們可以直接進行加減 32 進行轉換,但是有個更有趣的方法(可以說是取巧了) 就是大小寫字母的二進位制數值上,只有右數第五位相反

因此不管是大寫字母還是小寫字母,只要在右數第五位取反就可以得到其轉換結果

char c = 'a';

c ^= (1

<< 5);

// c = 'a'

/*or*/

char c = 'a';

c ^= (1

<< 5);

// c = 'a'

巧用位運算實現大小寫轉換

今天看王爽老師的 組合語言 時,很有收穫,不論是技術還是思考方式。任務是將字串進行大小寫轉換,但是還暫時不會用分支判斷語句 而且這樣的效率也不是最高的,有點類似於高階語言了 如果乙個問題的解決方法,使我們陷入一種矛盾之中。那麼,很可能是我們考慮問題的出發點有了問題,或是說,我們起初運用的規律並不適合...

基於位運算的字元大小寫轉換

我們知道,在ascii中 a z對應65 90 a z對應97 122 大小寫轉換可以通過 32進行 有一種更好的方法 基於位運算的轉換 統一轉成大寫 ch 0b11011111 簡寫 ch 0xdf 統一轉成小寫 ch 0b00100000 簡寫 ch 0x20 分析一下原理 對於與 0b1101...

C 大小寫轉換

time limit 1000 ms memory limit 65536 kib submit statistic problem description x現在要學習英文以及各種稀奇古怪的字元的了。現在他想把一串字元中的小寫字母變成大寫字元,大寫字母變成小寫字母,其他的保持不變。input 輸入...