「字元型減 0 可以得到整數型」的原因分析

2021-10-01 13:06:13 字數 825 閱讀 6971

計算機中的字元包括數值、英文本母、標點符號、製表符號及其他符號。每乙個字元都用乙個特定的二進位制**來表示,這就是字元的編碼。目前,字元編碼採用的是美國資訊交換標準**,即ascii 碼 。它是用乙個位元組的低七位來表示乙個字元的編碼, 2^7 =128 ,最高位是 0 ,所以,用 ascii 碼可表示 128 個字元)。有了這個我們就不怕我們輸入的字元,計算機不懂了。於是只要我們自己在程式中輸入乙個字元(例如:『a』)計算機在編譯過程中自動將它轉換成97的二進位製碼,這就是為什麼說字元本質上也是整型了,因為字元變數只是告訴計算機,我這個資料只佔乙個位元組,也就是說我超不出128這個數去。而int則告訴我這個數可能很大,有65534那麼大呢?

下面就說說為什麼字元減』0』可以到相應的整數。現**在比如我們要字元『1』轉換成數字1,就這麼乙個變化,我們看到了大家注意了字元型常量用』'括起來的原因是,它們在計算機中都以各自的ascii表示。而『1』的對應編碼是49的二進位製碼,但是我們的數字1,就等於1呀,所以為了由原來的『1』實際上就是49的二進位制變成現在的1對應的二進位制1,只好用49-48=1了。但是在ascii碼裡『0』對應的剛好是48的二進位製碼,所以我們轉換的時候只需要『1』-『0』=1;就可以了。**而數字的ascii碼是按順序規定的。所以其它字元要轉換成數字都可以用減『0』來表示。比如『2』的ascii是50,而我們要得到數字2,於是用『2』-48=2了。看來當我們知道資料在計算機中的儲存規則的時候,問題就迎刃而解了。

小寫字母的轉換:先看ascii碼:az是97122的二進位制,而az是6590的二進位制編碼,於是我們就得出:大寫字母=小寫字母-32 ;這個公式了。當然這裡的32我也可以這麼寫『z』=『z』-『空格』。因為空格的ascii碼是32對應的二進位制編碼。

原鏈結

字元型(char)如何轉成整數型(int)

我是乙個新手,這也是我第一次寫部落格,相信很多人應該和我一樣,在剛開始接觸c語言的時候,不知道應該怎麼辦,但是學習的方法就是不停的看書,然後每天都寫一下 不一定要寫得多,哪怕寫乙個程式也可以,最起碼要保持對 的敏感度。當我們在acm上寫題的時候,經常會碰到輸入一串數字,然後對這串數字進行相應的操作,...

Redis 物件共享(整數型字串)

redis 會在初始化伺服器時,建立一萬個字串物件,這些物件包含了從0到9999的所有整數值,當伺服器需要用到值為0到9999的字串物件時,伺服器就會使用這些共享物件,而不是新建立物件。為什麼 redis 不共享包含字串的物件?當伺服器考慮將乙個共享物件設定為鍵的值物件時,程式需要先檢查給定的共享物...

整數型int 為什麼不可以用 memset 函式?

個人認為 對於整數型陣列,若要是初始化為 非0 的值時應該使用for迴圈 而對於字元型 或 0 應該使用memset 函式 如下demo是可以的,能把陣列中的元素值都設定成字元1,include include using namespace std int main 而,如下程式想吧陣列中的元素值...