Ⅰ c語言中運算中自動類型提升會改變變數的數據類型嗎
變數本身的類型不會改變,變數的類型宴斗在定義時就已經定下來了
隱舉隱式改變的是表達式的類型晌答磨,而不是變數的類型
Ⅱ C語言編程——常量數據類型問題
2進制的1.5是1.1
2進制的1.1卻是有無限位的
你可模畝升以仔細思考下
float的精度和double的精度不同,那麼高精向低精度要捨去多的。
1.5不耐殲要捨去,1.1要捨去,所以要報warning
你可以試試1.125 1.625,應該旦老是不會報warning的。
Ⅲ c語言整型常量問題
首先要明白C語言的常量表達什麼?我們才能了解它的問題是什麼:
常量:其值不會發生改變的量,稱為常量。它們可以和數據類型接合起來分類。比如:整形常量,浮點型常量,字元常量等等,常量是可以不經過定義和初始化,而直接引用的。
常量分類:常量又分為:直接常量和符號常量。
直接常量又叫做:字面常量。如12,0,4.6,』a』,」abcd」
符號常量:如宏定義的:#define PI 3.14
特點:常量的值在其作用域內不會發生改變,也不能再被賦值。其在出現時就被當作一個立即數來使用。也就是說,只能被訪問,被讀,而不能被寫,被賦值。
常量所在的內存空間就被加上了只讀的屬性,它有點類似於const關鍵字,那麼它常見的問題如下:
(1)可以定義const常量,具有不可變性。 例如:
const int Max=100; int Array[Max];
(2)便於進行類型檢查,使編譯器對處理內容有更多了解,消除了一些隱患。例如:
void f(const int i) { .........} //編譯器就會知道i是一個常量,不允許修改;
(3)可以避免意義模糊的數字出現,同樣可以很方便地進行參數的調整和修改。
(4)可以保護被修飾的東西,防止意外的修改,增強程序的健壯性。 還是上面的例子,如果在函數體內修改了i,編譯器就會報錯; 例如:
void f(const int i) { i=10;//error! }
(5)為函數重載提供了一個參考。例如:
class A { ......
void f(int i) {......} //一個函數
void f(int i) const {......} //上一個函數的重載 ......
};
Ⅳ C語言中為什麼常量和表達式不能進行自增自減運算
首先說表達式,我們要知道自增和自減的原理,從表象上看自增自減對一個變數的值進行+1或-1操作。但是深入到底層的實現原理,這兩個操作其實是對固定的內存地址內的值進行+1或-1。所以要能夠自增自減首先就要滿足有固定的內存地址,而對於表達式來說,最終表達式計算得到的結果如果不賦值給變數的話是沒有固定內存地址記錄這個值的。
再來說常量,雖然常量是有分配固定內存地址,但是常量的意義就是指『不變化的量』,所以說這是類型限定了常量是不能被改變的,如果能變,那就不是常量了。
Ⅳ C語言中強制類型轉換究竟改變了什麼
不同類型的變數在內存中有不同的存儲方式和不同長度,強制轉型前後有什麼不同都要轉換過來。例如int y=3;char x=(char)y;,他們只是長短不同,就把y的高3位元組全截掉,只把最低一個位元組賦給了x;反過來,若char y=3;int x=(int)y;,那麼,將把高3位元組全用0補齊。若是浮點數與整型數強制轉型,不僅存儲長度發生了變化,而且存儲方式也發生了變化:整數用補碼表示,而浮點數用階碼+原碼表示,都要一一轉換過來。還有指針變數,轉換也較復雜。強制轉型時鏈叢為目標類型設置一個臨時變數,棚森櫻輪換後就用這個臨時變數操作,一旦操作結束,臨時變數也消春洞失了,整個過程是由編譯器編譯時安排好了的。
Ⅵ 為什麼說C語言中常量不能改變可以改變啊,比如我寫代碼的時候,本來寫的7,現在改成5,這不就改了嗎!
首先,概念我就不再多說了了,首先從他們定義上去區別,定義一個變數,我們只需要「int a;」這樣就夠了,如果你要定義一個常量「const int a;」這樣很明顯是錯誤的,必須要給它賦值,要「const int a=1;」對吧。
接著,之所以說常量不可變,接著 我們來看一段代碼,判斷一下哪句話會引起報錯呢: typedef char * pStr; char string[4] = "abc"; const char *p1 = string; const pStr p2 = string; p1++; p2++; 答案與分析: 問題出在 p2++上。 1)、const 使用的基本形式: const char m; 限定 m 不可變。 2)、替換 1 式中的 m, const char *pm; 限定*pm 不可變,當然 pm 是可變的,因此問題中 p1++ 是對的。 3)、替換 1 式 char, const newType m; 限定 m 不可變,問題中的 charptr 就是一種新類型,因此 問題中 p2 不可變,p2++是錯誤的。
再比如 下面定義了一個指向字元串常量的指針: const * ptr2 = stringprt1; 其中,ptr2 是一個指向字元串常量的指針。ptr2 所指向的字元串不能更新的,而 ptr2 是可以更新的。 因此, *ptr2 = "x"; 是非法的,而: ptr2 = stringptr2; 是合法的。
Ⅶ c語言運算有整型常量和單精度浮點型其結果是什麼型
結果會是:單精度浮點型。
在c語言中,若參與運算量的類型不同,則先轉換成同一類型,然後進行運算。轉換按數據長度增扮戚慎加的方向進行廳敬,以保證精度仔或不降低。如int型和float型運算時,先把int量轉成float型後再進行運算。
Ⅷ C語言中錯誤的整型變數新人麻煩詳細說明一下謝謝
在上一章我們了解C語言的基本結構並手寫了第一個C程序,當然由於一些操作上的失誤,導致了未能給大家展示編寫程序的截圖。哦,還有小夥伴問我用的什麼軟體,我現在在用dev。
上一章的截圖
那麼我們也要開始對今天的內容進行學習了,今天我們應該開始學習一些C語言中的基本概念,常量與變數、各種類型數據的儲存空間以及C數據的運算。
因為篇幅原因我們將分三小節進行講解。
一、常量與變數
1. 常量
常量是一種固定值,在程序執行期間不會改變。這些固定的值,又叫作字面量。
常量可以是任何的基本數據類型,比如整數常量、浮點常量、字元常量,或字元串字面值,也有枚舉常量。關於這些基本的數據類型我們將在下一小節進行詳細的講解。
常量就像是常規的變數,只不過常量的值在定義後不能進行修改。
整數常量
整數常量可以是十進制、八進制或十六進制的常量。前綴指定基數:0x 或 0X 表示十六進制,0 表示八進制,不帶前綴則默認表示十進制。例如我們定義一個常量a的值是22,那麼用十進製表示是 int a=22;,那麼如果換做用八進製表示呢?此時該語句就會變為 int a=026;,對,下面的語句就是用十六進製表示的 int a=0X16;誒這個時候是不是有點懵?別緊張,我們當時也懵。那麼你是不是想了解怎麼進行單位的換算呢?不過,大可不必,因為基本是用不到的。除非你自己想用。
有時整數常量也可以帶一個後綴,後綴是U和L的組合,U 表示無符號整數,L 表示長整數。後綴可以是大寫,也可以是小寫,U和 L的順序任意。那他們在什麼時候使用呢?
以下是引用的內容:
字面量整數數字如果在int整數范圍內,就默認是int類型的,如果超過了int整數范圍,就默認是long類型的。 int的范圍是負20多億到正20多億,10十位數字,34359738368明顯11位數字,已經超過int范圍,默認就是long型的,後面加不加L都是一樣的。 在int范圍內的整數字面量後加L才有實際意義。
這個東西現階段基本也用不到
浮點常量
浮點常量由整數部分、小數點、小數部分和指數部分組成。您可以使用小數形式或者指數形式來表示浮點常量。
當使用小數形式表示時,必須包含小數點、指數,或同時包含兩者。當使用指數形式表示時,必須包含整數部分、小數部分,或同時包含兩者。帶符號的指數是用 e 或 E 引入的。
字元常量
是括在單引號中,例如,『x』 可以存儲在char類型的簡單變數中。關於char這一關鍵字,我們在後面的小節中會給予解釋。
字元常量可以是一個普通的字元 『x』、一個轉義序列『\t',或一個通用的字元『\u02C0』。
在 C 中,有一些特定的字元,當它們前面有反斜杠時,它們就具有特殊的含義,被用來表示如換行符\n或製表符\t等
下圖是一些轉義字元及其含義,圖片為引用內容
字元串常量
字元串字面值或常量是括在雙引號 "" 中的。一個字元串包含類似於字元常量的字元:普通的字元、轉義序列和通用的字元。當然如果你要打個句子,又沒用漢語,又想讓人看懂,不被打,就可以使用空格做分隔符。舉個栗子,例如你想打個英文「Hello world」結果你搞了個「Helloworld」,這是兩個詞,再多了,嗯那和亂碼也就沒有區別了。
2. 變數
在了解完常量之後我們接下來就是了解一下C語言中的變數。在C語言中變數其實是程序可操作的存儲區的名稱,就像是你我的名字一樣,代表我們這個人,而C的變數就是代表了儲存區。
並且每個變數都有特定的類型,類型決定了變數存儲的大小和布局,該范圍內的值都可以存儲在內存中,運算符可應用於變數上。 變數的名稱可以由字母、數字和下劃線字元組成。它必須以字母或下劃線開頭,劃重點不要嘗試拿數字做開頭,他不對。大寫字母和小寫字母是不同的,因為 C 是大小寫敏感的,換句話說就是假定你定義了一個變數temp,那麼TEMP,Temp並不等於temp,而是作為兩個單獨的其他變數。
還有C中的左值和右值是兩種類型的表達式
以下內容來自引用:
左值:指向內存位置的表達式被稱為左值表達式。左值可以出現在賦值號的左邊或右邊。
右值:術語右值指的是存儲在內存中某些地址的數值。右值是不能對其進行賦值的表達式,也就是說,右值可以出現在賦值號的右邊,但不能出現在賦值號的左邊。
舉個例子
a=3;
a,就是左值,為嘛?他在左邊啊,你不會這都猜不到吧? 那右值你肯定也了解了吧。至於上面的定義也很好理解,就是一個具體的值不能放在左邊。為啥?你仔細想想給一個變數賦予一個值或另一個變數我可以理解,但給一個具體的值賦一個變數這叫個什麼事。
二、各種類型數據的儲存空間
在結束第一節的學習後我們要進行第二節的學習,在這一節我們要了解各種各樣類型的數據。數據類型指的是用於聲明不同類型的變數或函數的一個廣泛的系統。變數的類型決定了變數存儲佔用的空間,以及如何解釋存儲的位模式。這一節將向大家介紹一下一些基本的常用的數據類型。
int,是整型類型。
int a;
就是將變數a定義為一個整型變數,那麼a如果被輸出,那麼a只能是一個整數,換句話數,a只能能精確到個位數。
float、double則恰恰相反,他們則是浮點類型,對於他們而言與int的區別就是,他們可以將數值精確到小數點後。而二者之間的不同則是精確范圍的不同,double要優於float。前者是15位而後者只有6位。
上面三者都與數字有關而下面這一位就有所不同了,他可以定義字元。
char a= 『x』;
則是將a定義為字元『x』,輸出a的時候將會在屏幕上顯示字元『x』,當然有的小夥伴可能輸出的是120啊,78啊,或這空白啊之類的,這是你們犯了一些小小的錯誤。
示例如下
以上這些就是目前前期你大概率會天天碰到的一些數據類型了,當然還有一些像void 類型
枚舉類型,派生類型這些數據類型,在這里就不多作介紹了。有興趣的小夥伴們可以去自行網路一下哦。
三、C數據的運算
C語言中的數據運算形式非常多,基本上你在數學上學到的這里都有,加減乘除,非或與,大於小於等於不等於......
在這里我會為大家介紹一些新一點的運算符
1:++、--:++為自增運算符,--為自減運算符,二者正好相反。以--為例,我們先 int a=10
此時a--將得到9,但要注意a=b--;與a=--b;是兩個操作,a=b--;是先把b的值賦給a在對b進行自減操作,而a=--b;則是先對b進行自減,然後再把b的值賦給a。
還有一種是這種形式的a+=b;其意義為a=a+b;當然類似的運算還有-=,/=,%=......
老規矩詳細的運算規則及解釋我就留在下面了。
以下圖片均來自引用:
那你可能又有疑問產生了,這么多的規則那麼它們之間的運算規則又是什麼呢?廢話不多說,我們直接上圖:
好了今天的內容就到此為止了,如果有什麼疑問可以私信我哦!
Ⅸ C語言中字元常量可以 參加運算嗎
這就要從字元型數據在內存中的存儲方式來解釋了。
在C語言中,實際上字元型數據在內存中是以二進制形式存放的,並不是真正的把一個字元存進內存里。在對字元型數據進行相加減運算的時候,系統會首先會將char型數據以隱形的方式轉化成int型數據再進行相加減運算的。
因此,由字元型數據在內存的存儲方式來看,字元型數據是可以進行數值運算的,對字元型數據做數字運算實際上就是對字元本身對應的ASSIC碼進行相應的數值運算。
Ⅹ C語言 常量是什麼
在程序執行過程中,其值不發生改變的量稱為常量。常量分類:
說明:符號常量在使用之前必須先定義,其一般形式為:
#define 標識符 常量
其中#define也是一條預處理命令(預處理命令都以"#"開頭),稱為宏定義命令(在後面預處理程序中將進一步介紹),其功能是把該標識符定義為其後的常量值。一經定義,以後在程序中所有出現該標識符的地方均代之以該常量值。