c c 語言資料型別轉換的方式及常見問題

2021-09-30 12:21:08 字數 2613 閱讀 5914

近日去筆試,發現對c語言型別轉換有些陌生了,速來整理下

1.1、unsigned char

大小:1位元組,8位

儲存結構:8個真值位

最大值:1111 1111,2^7=128

最小值:0000 0000,2^0=0

取值範圍:0 ~ 128

1.2、signed char / char

大小:1位元組,8位

儲存結構:1個符號位 + 7個真值位

正數最大值:0111 1111,2^7-1 = 127

正數最小值:0000 0000,2^0 = 0

正數範圍:0~127

*負數最大值: 1111 1111,

除符號位取反:1000 0000,

加1: 1000 0001, -1

*負數最小值:1000 0000,

取反:1111 1111

去掉符位1:0111 1111

加上1為: 1000 0000 , 2^7 =- 128

負數範圍-128~-1

所以char範圍:-128~127

同上分析:

2.1、unsigned

型別 | 位元組 | 位數 | 範圍

u_char,1 ,8,0~2^7

u_short,2,16,0~2^16, 0~ 128*128, 0~65536

u_int,4,32,0~2^16

u_long,8,64,0~2的64次方

u_long long ,16,208,0~2的208次方

2.2、signed

型別 | 位元組 | 位數 | 範圍

char,1,8,-2^7 ~ 2^7-1

short,2,16,-2^15 ~2

int,4,32,0~2^16

long,8,64,0~2的64次方

long long ,16,208,0~2的208次方

3.1、儲存方式

實數在記憶體中以規範化的浮點數存放,包括數符、階碼、尾數。數的精度取決於尾數的位數。比如32位機上float型為23位 double型為52位。

單精度float型儲存在記憶體中的大小為4個位元組,即32位。

浮點表示的一般形式為:r=m*2^e (r:real m:mantissa尾數 e:exponent階碼)

把上面float的二進位制可分成三部分:

x ******xx *********************xx

數符(1b) 階碼(8b) 尾數(23b)

double型的浮點數分別是:數符(1b)、階碼(8b)、尾數(52b)

數符sign:real的正負號 「+」:0 「-「:1

階碼e:e=e-127(double型中e=e-1023) e為正值說明這個浮點數向左移動了e位, e為負值說明這個浮點數向右移動了e位。127=2^7-1 1023=2^10-1

尾數m:有效數字位,這裡是有效數字位的部分二進位製碼

float單精度浮點數

符號位—-階碼位—-尾數

1位——-8位——-23位

s——–e———-m

double雙精度浮點數

符號位—-階碼位—-尾數

s——–e——-m

1位—–8位—–23位

例1:float型浮點數125.5轉化成32位二進位制浮點數

125.5的二進位製碼為1111101.1,寫成二進位制的科學計數為:1.111101*2^6(因為科學計數法「整數」部分大於1,在二進位制中,「整數」部分只能恒為1)即向左移6位,則e=6,則e=e+127=133,而e的二進位製碼為10000101,而1.111101把「整數」部分去除1之後為111101,之後補0,共23b,形成了階碼。

所以125.5的32位二進位制浮點數為

0 10000101 11110100000000000000000

例2:float型浮點數0.5轉化成32位二進位制浮點數

0.5的二進位製碼為0.1,寫成二進位制的科學計數為:1.0*2^(-1)即向右移1位,則e=-1,則e=e+127=126,而e的二進位製碼為01111110,而1.0把「整數」部分去除1之後為0,之後補0,形成了階碼。

所以0.5的32位二進位制浮點數為

0 01111110 00000000000000000000000

double型浮點數類似。

例3:32位二進位制浮點數為0 10000010 00010000000000000000000轉化成十進位制數浮點數

題中已給我們分了三部分,數符部分、階碼部分、尾數部分。

數符部分為0,則代表此數為正數;階碼部分為10000010,則e=130,則e=e-127=3,則說明其向左移了3位,0001加上「整數」部分的1之後,為1.0001。則原二進位制數為1000.1=十進位制8.5,或r=1.0001*2^3=8.5

其中很多計算類似。可舉一反三!

二、轉換型別

1、隱式轉換

2、顯示轉換

3、c++呼叫庫給的轉換方法

三、經典題目

四、刷題練習

常 的資料型別轉換

函式格式 使用示例 描述int x base int 8 可以轉換的包括string型別和其他數字型別,但是會丟失精度 float x float 1 或者float 1 可以轉換string和其他數字型別,不足的位數用0補齊,例如1會變成1.0 complex real imag complex ...

c c 資料型別轉換

c c 資料型別轉換1 float,char,string,cstring unicode 統一碼 萬國碼 單一碼 是一種在計算機上使用的字元編碼。它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言 跨平台進行文字轉換 處理的要求。1990年開始研發,1994年正式公布。隨著計算...

C C 資料型別轉換

在c c 中,整型 單精度 雙精度及字元型資料可以進行混合運算,即雙目運算子兩邊的運算元型別可以不同。當表示式中不同型別的資料進行運算時,會發生資料型別的轉換。c c 中有兩種型別轉換的方法 自動型別轉換和強制型別轉換。所謂自動型別轉換是指在不同型別資料進行混合運算時,系統會自動進行資料型別的轉換。...