C語言編程基礎學習字符型數據的ASCII碼值為何是負數?


C語言是面向過程的,而C++是面向對象的

C和C++的區別:

C是一個結構化語言,它的重點在於算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。 所以C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”。

C與C++的最大區別:在於它們的用於解決問題的思想方法不一樣。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”,而就語言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,錯!算法是程序設計的基礎,好的設計如果沒有好的算法,一樣不行。而且,“C加上好的設計”也能寫出非常好的東西。

有如下一段C語言程序:

#include "stdio.h"

int main(void)

{

char a = 0xC8;

printf ("字符a的ASCII碼值的10進制是%d ", a);

return 0;

}

程序定義了一個字符‘a’,並且賦予了初始值“0xC8”,這是一個16進制的數。最后,通過printf函數輸出字符a的值。

程序不難,光看程序,也應該知道最終的結果。16進制“0xC8”的10進制數是200,所以程序應該輸出字符a的ASCII碼值是200吧。實際運行結果如下:

結果是-56,還是個負數,C語言初學者估計一頭霧水了。

其實字符a在定義時如果就寫一個“char”,則就默認類型是“signed char”,也就是說字符a的10進制ASCII碼值是有符號的,取值范圍是【-128,127】,那么200這個數肯定就超過這個范圍,超過的部分是200 – 127 = 73。那么超過的部分又從-128開始計數了,也就是-128 + 73 - 1 = -56了。

如果在定義字符a時,類型寫成“unsigned char”,那么舊標明字符a的10進制ASCII碼值是無符號的,取值范圍就是【0,255】了。朋友們可以修改下程序看看結果是什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM