關於隱式型別轉換

2021-07-08 16:10:19 字數 980 閱讀 3366

$ cat a.cpp

#include

#include

int main()

;str1[0] = 0xf0;

str1[1] = 0x00;

//先整型提公升 再隱式轉換 char ---> int ---> long

long num = (str1[0] << 8) | str1[1];

printf("%ld\n", num);

printf("%x\n", num);

//先強制型別轉換 再整型提公升 再隱式轉換 char ---> unsigned char ---> int ---> long

long num1 = ((unsigned char)str1[0] << 8) | (unsigned char)str1[1];

printf("%ld\n", num1);

printf("%x\n", num1);

//先整型提公升 再隱式轉換 char ---> int ---> long

long num2 = ((str1[0] & 0x0ff) << 8) | (str1[1] & 0x0ff);

printf("%ld\n", num2);

printf("%x\n", num2);

long l = 0xf0 << 8 | 0x00;

printf("%ld\n", l);

printf("%x\n", l);

return 0;

$ ./a.out

123456

8-16

fffffff0

-4096

fffff000

61440

f000

61440

f000

61440

f000

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

隱式型別轉換

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

隱式型別轉換

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

隱式型別轉換

1.c的整型算數運算總是至少以預設型型別的精度來進行的。為了獲得這個精度,表示式的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換叫 整型提公升 下面我們來看個例子 char a 2 char b 127 char c a b 求c 多少?首先char為1個位元組 而且是有符號的 char最大...