【C++】賦值過程中類型轉換


注意:以下內容摘自文獻[1],修改了部分內容。

1.賦值過程中的類型轉換

  如果賦值運算符兩側的類型不一致,但都是數值型或字符型時,在賦值時自動進行類型轉換。

(1) 將浮點型數據(包括單、雙精度)賦給整型變量時,舍棄其小數部分。

(2) 將整型數據賦給浮點型變量時,數值不變,但以指數形式存儲到變量中。

(3) 將一個double型數據賦給flout變量時,要注意數值范圍不能溢出。

float  f;
double d = 123.456789e100;
f = d;

就會出現溢出的錯誤,因為超過了float型的數據范圍。

(4) 字符型數據賦給整型變量,將字符的ASCII碼賦給整型變量。

(5) 將一個int, short或long型數據賦給一個char型變量,只將其低8位原封不動地送到char型變量(發生截斷)。例如

short int i = 289;
char c;
c = i;          // 將一個int型數據賦給一個char型變量

      i = 289

0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1

 

 

c = 33

0 0 1 0 0 0 0 1

為了方便,假設一個int型數據占兩個字節(實際上,在VC++ 6.0中占4個字節),得到的c = 33,只得到i的低8位。

(6) 將signed型數據數據賦給長度相同的unsigned型變量,將存儲單元內容原樣照搬(連原有的符號位也作為數值一起傳送)。

例子:

// 20191009.cpp : 定義控制台應用程序的入口點。
#include "stdafx.h"
#include <iostream>
#include <typeinfo>
using namespace std;

int main()
{
    system("color 3f");
    unsigned short a;
    short int b = -1;
    a = b;
    cout << "a = " << a << endl;
    system("pause");
    return 0;
}

結果:

 

 不妨從變量值在內存中存儲形式分析,數據在內存中都是以二進制形式的補碼存儲的。b = -1,-1的補碼形式為:1111 1111 1111 1111,將它全部傳給a,a是無符號短整型變量,a = 1111 1111 1111 1111 = 65535;如果b為正值,且在0~32767之間,則賦值后數值不變。

參考文獻

[1]譚浩強.C++程序設計[M].北京:清華大學出版社.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM