介紹

類型轉換:儘量不要寫含有類型轉換的代碼(無意間避免不了),小的類型給大的問題不大,大的類型給小的就會有問題

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 的區別。

站在計算機的角度去分析,彙編計算機的基礎知識

剛開始只看到表面,最終我們儘量的站在計算機的角度去看