【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語言字串
- Javascript基礎:變數型別轉換JavaScript變數型別
- java 基礎型別與byte[]的轉換Java型別
- c++primer——過載運算與型別轉換C++型別
- 交換2個整形數引發的思考
- PHP將整形數字轉為Excel下標PHPExcel
- C 語言整數與字串的相互轉換介紹字串
- 位運算實現整數與位元組陣列轉換陣列
- string與數字相互轉換
- 基礎問題:進位制轉換
- Linux基礎命令—文字格式轉換fmtLinux
- Linux基礎命令---文字格式轉換fmtLinux
- Linux基礎命令—格式轉換expand、unexpandLinux
- TensorFlow 計算與智慧基礎
- 零基礎學習 Python 之數字與運算Python
- java基礎變數的交換Java變數
- c++基礎三(變數)C++變數
- c#入門-型別轉換和運算C#型別
- Java 基礎 之 算數運算子Java
- 1.2程式設計基礎之變數定義、賦值及轉換程式設計變數賦值
- 【Go】IP地址轉換:數字與字串之間高效轉換Go字串
- Java基礎之IO轉換流學習Java
- [Java基礎]之 資料型別轉換Java資料型別
- Linux基礎命令---文字格式轉換expand、unexpandLinux
- Pandas 基礎 (11) - 用 melt 做格式轉換
- 非計算機專業0基礎轉行學Python還是C++?計算機PythonC++
- c++中數字和字串的轉換C++字串
- Java基礎-基礎語法-變數與常量Java變數
- C#+OpenCV基礎(四)_旋轉翻轉透視C#OpenCV
- 轉換日期(C)
- AD模數轉換&DA數模轉換
- C語言進位制轉換與列印C語言
- 基於c++的數學運算C++
- Javascript基礎之-強制型別轉換(三)JavaScript型別
- Javascript基礎之-強制型別轉換(一)JavaScript型別
- [基礎] JavaScript 型別轉換及面試題JavaScript型別面試題
- 【.NET 與樹莓派】數模轉換樹莓派
- 初等數學I 自然數 第二節 序數理論基礎與自然數的運算