【C基礎】整形提升與算數轉換
在C語言中尤其要注意隱式型別轉換、整形提升與算數轉換
1、表示式求值
決定表示式求值的順序:操作符的優先順序
和結合性
但是在表示式的運算元在求值的過程中可能需要轉換為其他型別,因此提出隱式型別轉換的概念。
2、隱式型別轉換
C的整型算術運算總是至少以預設整型型別的精度來進行的。
為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換稱為整型提升
。
2.1 整型提升的意義
-
CPU內整型運算器(ALU)的運算元的位元組長度一般就是int的位元組長度,同時也是CPU的通用暫存器的長度
-
因此,即使兩個char型別的相加,在CPU執行時實際上也要先轉換為CPU內整型運算元的標準長度
-
所以,表示式中各種長度可能小於int長度的整型值,都必須先轉換為int或unsigned int,然後才能送入CPU去執行運算
2.2 例項
#include<stdio.h>
int main()
{
char a=3;
char b=127;
char c=a+b;
printf("%d\n",c);
return 0;
}
結果是130嗎? 答案並不是
正確結果應該是:-126
分析:
2.3 如何整形提升
整型提升是按照變數的資料型別的符號位來提升的
2.4 算數轉換
如果某個操作符的各個運算元屬於不同的型別,那麼其中一個運算元必須轉換為另一個運算元的型別,否則操作就無法進行。
尋常算數轉換
long double
double
float
unsinged long int
long int
unsigned int
int
//由下至上精度越來越高
如果某個運算元的型別在上面這個列表中排名較低,那麼首先要轉換為另外一個運算元的型別後執行運算(注意:不合理的算數轉換,可能會導致精度丟失)
相關文章
- c語言字串與整形,浮點數...相互轉換C語言字串
- PHP基礎教程-08 整形變數PHP變數
- Javascript基礎:變數型別轉換JavaScript變數型別
- 3D數學基礎-向量運算基礎和矩陣變換3D矩陣
- 整形資料轉換為字串的研究字串
- java 基礎型別與byte[]的轉換Java型別
- 數值計算基礎
- JAVA基礎:Java變數型別間的相互轉換(轉)Java變數型別
- C# 基礎知識:字元編碼、編碼轉換C#字元
- c++primer——過載運算與型別轉換C++型別
- C語言中字串與整數的相互轉換C語言字串
- PHP將整形數字轉為Excel下標PHPExcel
- c++基礎三(變數)C++變數
- Java 基礎 之 算數運算子Java
- javascript基礎(算數運算子)(八)JavaScript
- java基礎:型別轉換castJava型別AST
- C 語言整數與字串的相互轉換介紹字串
- 位運算實現整數與位元組陣列轉換陣列
- C/C++ 時間轉換與表示C++
- 零基礎學習 Python 之數字與運算Python
- 基於c++的數學運算C++
- Java基礎-基礎語法-變數與常量Java變數
- c語言字串,數字轉換C語言字串
- TensorFlow 計算與智慧基礎
- 05-JavaScript基礎-算數運算子JavaScript
- 基礎問題:進位制轉換
- 初等數學I 自然數 第二節 序數理論基礎與自然數的運算
- 1.2程式設計基礎之變數定義、賦值及轉換程式設計變數賦值
- Python3 基礎學習之數值進位制轉換Python
- Squid基礎與配置(轉)UI
- 基類與派生類的轉換
- string與數字相互轉換
- c#入門-型別轉換和運算C#型別
- Pandas 基礎 (11) - 用 melt 做格式轉換
- [Java基礎]之 資料型別轉換Java資料型別
- Linux基礎命令---文字格式轉換fmtLinux
- Linux基礎命令—文字格式轉換fmtLinux
- [基礎] JavaScript 型別轉換及面試題JavaScript型別面試題