隱式型別轉換

2021-08-18 11:47:36 字數 1156 閱讀 4605

1.c的整型算數運算總是至少以預設型型別的精度來進行的。為了獲得這個精度,表示式的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換叫【整型提公升】

下面我們來看個例子:

char  a  = 2;

char   b  = 127;

char  c= a+b;

求c=多少?

首先char為1個位元組(而且是有符號的)  char最大為     01111111  --  127

這時計算器會把它提公升為整型計算,   a    --       000000000000000000000000000010

b   --        000000000000000000000001111111

相加為        000000000000000000000010000001

注意:在進行自動型別轉換的時候,如果原來的數是無符號數,那麼在擴充套件的時候,高位填充的是0;如果是有符號數,

那麼高位填充的時符號位!

減一 取 反碼

c = -127

其實在char 型別中,  char 的範圍是    0~127 ,-128,-127.-126  ~ 0   

將-1賦給unsigned  char :

結果是 255

可以用補碼的形式求出來,也相當於 -1對256取模後的值((-1+256)%256=255)

2.算術轉換 

如果某個操作符 的各個運算元屬於 不同的型別,那麼除非乙個運算元的轉換為另乙個運算元的型別,否則操作就無法執行。下面是層次體系稱為尋常算術轉換。

long double 

double

float

unsigned  long int 

long int

unsigned int 

int從下到上 ,依次轉換

3.輸出轉換

(以下是在部落格裡找到學習的)

注意:較長型資料轉換成短型資料輸出時,其值不能超出短型資料允許的值範圍,否則 轉換時將出錯

。如:long a=80000;

printf("%d",a);

執行結果為14464,因為int型允許的最大值為32767,80000超出此值,故結果取以32768為模的餘數,即進行如下取餘運算:

(80000-32768)%32768=14464;

隱式型別轉換

c 本身對內建型別定義了各種隱式的型別轉換,這種內建的型別轉換在可能導致精度 丟失的情況下編譯器會發出警告,但當我們定義自己的型別時,提供各種隱式轉換往往 是弊大於利的 至少在我編寫過的 中很少用到 隱式的型別轉換可分為 其它型別到本型別,本型別到其它型別兩種.第一種通過單變數 可呼叫之建構函式進行...

隱式型別轉換

c語言中有以下四種情況會進行隱式轉換 1 算術運算子中,低型別轉換為高型別。2 賦值表示式中,右邊表示式的值自動隱式轉換為左邊變數的型別,並賦值。3 函式呼叫傳遞引數時,系統將實參轉換為形參的型別後,賦給形參。4 函式有返回值是,系統將表達值型別轉換為返回值型別。進行算術運算時,不同型別的數必須轉換...

隱式型別轉換

double float 高 long unsigned int char,short 低 1.如乙個int 型資料與乙個unsigned型資料一起運算,需要先將int型資料轉換為unsigned型,然後兩者再進行運算,結果為unsigned型。所有這些轉換都是由系統自動轉換 2.乙個大於0x80的...