c c 練習之強制型別轉換

2021-09-20 18:32:56 字數 714 閱讀 8586

**:

#includeusing namespace std;

int main()

{ int a = 123456789;

int *pi = &a;

cout<<"*pi="<<*pi《解釋:

##pi指標變數的型別與變數a的型別相同,所以pi的指向的值就是a的值,a的值轉換成16進製制如下:

123456789 = 0x07 5b cd 15

(gdb) x/4xb &a

0x7fffffffe05c: 0x15 0xcd 0x5b 0x07

5c 5d 5e 5f

(gdb) p ps

$2 = (short *) 0x7fffffffe05c

則*ps = 0xcd15 = 1 100 1101 0001 0101‬

符號位 數字位

可以看到由於此二進位制數符號位為1,則它是乙個負數,負數在計算機中以反碼形式儲存,則它的原碼就是數字位-1再取反:

即:1 011 0010 1110 1011 = -13035就是輸出

##pc與ps原理相同,但是由於pc為字元型變數,所以最後輸出是經過ascⅱ碼轉換後的符號,

由於char型別取1個位元組,所以*pc = 0x15 = 21 ==> ascⅱ碼表中對應21的字元

c c 強制型別轉換

q 什麼是c風格轉換?什麼是static cast,dynamic cast 以及 reinterpret cast?區別是什麼?為什麼要注意?a 轉換的含義是通過改變乙個變數的型別為別的型別從而改變該變數的表示方式。為了型別轉換乙個簡單物件為另乙個物件你會使用傳統的型別轉換操作符。比如,為了轉換乙...

C C 強制型別轉換

定義 轉換是指通過改變變數的型別為別的型別從而改變變數的表達方式。為了型別轉換乙個簡單物件為另乙個物件可能會使用傳統的型別轉換操作符,比如,為了轉換乙個型別為doubole的浮點數的指標到整型 int i double d i int d 或者 i int d int i double d i in...

強制型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast dynamic cast reint...