介紹
類型轉換:儘量不要寫含有類型轉換的代碼(無意間避免不了),小的類型給大的問題不大,大的類型給小的就會有問題
1.將一種運算符類型賦值給另一種運算符類型,會涉及類型轉換
2.表達式中包含不同類型時,會涉及類型轉換
3.將參數傳遞給函數時,會涉及類型轉換
示例1
#include <iostream>
#include <climits>
using namespace std;
int main() {
// 用來設置輸出的格式
cout.setf(ios_base::fixed,ios_base::floatfield);
// movl $0xF4240 -> -0x3c(%rbp)
int annualpay = 1000000;
// 兩個指令:轉換指令,賦值指令
// ctvsi2ssl 將 int 轉為 short ,short 就兩個字節,截取 int 低16位 就是 0x4240 = 16960
//
short annualpay1 = annualpay;
cout << "年薪1:" << annualpay1 << endl;
int annualpay2 = annualpay;
cout << "年薪2:" << annualpay2 << endl;
return 0;
}
錯誤輸出
xaye@orange:~/code/dev/4$ ./a.out
年薪1:16960
年薪2:1000000
示例2
#include <iostream>
#include <climits>
using namespace std;
int main() {
// 用來設置輸出的格式
cout.setf(ios_base::fixed,ios_base::floatfield);
// 2.表達式中包含不同類型時,會涉及類型轉換
int num1 = 9;
int num2 = 5;
float num3 = 6.0;
// 表達式如果有多類型的計算,會向上兼容,小的會轉大的,不會丟失精度
int result1 = num1 / num2;
float result2 = num1 / num3;
cout << "result1 = " << result1 << "; result2 = " << result2 << endl;
return 0;
}
輸出
xaye@orange:~/code/dev/4$ ./a.out
result1 = 1; result2 = 1.500000
示例3
#include <iostream>
#include <climits>
using namespace std;
int main() {
// 用來設置輸出的格式
cout.setf(ios_base::fixed,ios_base::floatfield);
// 3.將參數傳遞給函數時,會涉及類型轉換
int auks, bats, coots;
auks = 19.99 + 11.99;
bats = (int)19.99 + (int)11.99;
coots = int(19.99) + int(11.99);
cout << "auks = " << auks << endl;
cout << "bats = " << bats << endl;
cout << "coots = " << coots << endl;
return 0;
}
輸出
xaye@orange:~/code/dev/4$ ./a.out
auks = 31
bats = 30
coots = 30
已經學了:命名規則、整數數據類型、字符數據類型、float 數據類型、const 與 define 的區別。
站在計算機的角度去分析,彙編計算機的基礎知識
剛開始只看到表面,最終我們儘量的站在計算機的角度去看