C語言中的整數及其相互轉化

2021-09-12 14:29:36 字數 1055 閱讀 8563

c中支援多種整數型別。

c語言中允許無符號整數與帶符號整數的相互轉化,轉化前後的機器數不變,只是前後的解釋發生了變化。

例如:1、

int

main()

輸出結果:

在上面的**中,x是int 型別,且其**在32位二進位制中的表示為 1+30個0+1,但是資料在儲存的時候是用補碼來儲存的,且其補碼為 32個1,則當其為有符號數時自然為-1,但是用無符號數來解釋的時候得到的是一串1的正整數,其值為 2的32次方-1 ,也就是4294967295;

在unsigned中2147483648的二進位制表示為1000…0,按無符號數輸出是沒問題,但是按有符號的來解釋的話就是最小負數 -2147483648;

2、

又有 -2147483648 < 2147483647 在iso c90標準中,這個的結果卻是 false , 編譯器對表示式編譯時,將

-2147483648分為2147483648 和 -兩部分來處理,因為2147483648 超出了 int 的範圍,編譯器將 -2147483648 自動轉化為unsigned int 型別,那麼前者就成了乙個無符號整數,那麼和前面一比,自然是false ;

又-1<2147483647 ,這個是true 因為兩者都沒超過int 的常量範圍,不會自動轉化,所以就符合大小的比較。

又 如果定義 int i= - 2147483648 ,i<2147483648 這個是成立的,因為實現定義了 int 型別的變數, 不會即使超出了範圍,也不會自動轉化,因此 此式成立。

C byte陣列和int整數的相互轉化

網上搜了很多內容,沒有找到直接轉換函式,有乙個轉換 需要將byte陣列轉換為字元陣列,以字元陣列為引數轉換為int整數,多了一層轉換。好不容易找到乙個直接轉換函式,記錄下來,其中bytes 0 儲存低位,bytes 3 儲存高位位元組。int轉byte void inttobyte int i,by...

進製的相互轉化

我們常用的進製包括 二進位制 八進位制 十進位制與十六進製制,它們之間區別在於數運算時是逢幾進一位。十進位制轉二進位制 方法為 十進位制數除2取餘法,即十進位制數除2,餘數為權位上的數,得到的商值繼續除2,依此步驟繼續向下運算直到商為0為止。二進位制轉十進位制 方法為 把二進位制數按權展開 相加即得...

C語言的浮點型別及資料的相互轉化

c語言中有float 和double 兩種不同的 浮點型別,分別對應 ieee 電氣電子工程師學會 754單精度格式和雙精度格式,相應的十進位制有效數字分別為 7 位和 17位左右。在各種資料相互轉化時,滿足 1 當int轉化為 float 時不會發生溢位,但有效數字可能被捨去 int 的32位都用...