無符號數:不存在正負之分,所有位都用來表示數的本身。
有符號數:最高位用來表示數的正負,最高位為1則表示負數,最高位為0則表示正數。
1.無符號數--->有符號數
看無符號數的最高位是否為1,如果不為1(為0),則有符號數就直接等於無符號數;如果無符號數的最高位為1,則將無符號數取補碼,得到的數就是有符號數。
以unsigned char和char為例子:
1.1將無符號數2轉為有符號數
2的原碼是:0000 0010,可知最高位不為1,因此轉為有符號數之後也是2。
程式:1#include 2 3int main(void) 4
執行結果:
1.2將無符號數130轉為有符號數
130的原碼是:1000 0010,可知最高位為1,因此需要取它的補碼,補碼為11111110,這是乙個負數,取最高位作為-號,取最低7位作為數值得到的結果是-126。
程式:1#include 2 3int main(void) 4
執行結果:
2.有符號數--->無符號數
看有符號數的最高位是否為1,如果不為1(為0),則無符號數就直接等於有符號數;如果有符號數的最高位為1,則將有符號數取補碼,得到的數就是無符號數。
以char 和unsigned char為例子:
2.1將有符號數3轉為無符號數
3的原碼是:0000 0011,可知最高位不為1,因此轉為無符號數之後也是3。
程式:1#include 2 3int main(void) 4
執行結果:
2.2將有符號數-7轉為無符號數
-7的原碼是:1000 0111,可知最高位為1,因此需要取它的補碼,補碼為11111001,這是乙個正數,因此整個數的值就是249。
程式:1#include 2 3int main(void) 4
執行結果:
總結:有符號數與無符號數之間的轉換,都要看要轉換的數的最高位是否為1,如果不為1,則轉換結果就是要轉換的數的本身;如果為1,則轉換結果就是轉換的數(看作是負數)的補碼。
C語言有符號數與無符號數之間的轉換
寫在前面 以下內容是我的愚見,如有不對,歡迎拍磚。無符號數 不存在正負之分,所有位都用來表示數的本身。有符號數 最高位用來表示數的正負,最高位為1則表示負數,最高位為0則表示正數。1 無符號數 有符號數 看無符號數的最高位是否為1,如果不為1 為0 則有符號數就直接等於無符號數 如果無符號數的最高位...
有符號數與無符號數
關於有符號數和無符號數的一些重要知識點,包括它們在記憶體中的儲存方式 互相轉換 越界計算等。大家肯定都知道,對於有符號數,資料型別的最高位用於標示資料的符號,最高位為1表示負數,最高位為0表示正數,那麼今天我們主要就此討論乙個問題 在計算機內部具體是如何表示有符號數呢?在計算機內部是通過補碼的方式來...
C語言中的有符號數與無符號數
1.c語言支援所有整型資料型別的有符號和無符號運算,儘管c語言標準並沒有指定用哪種方式來表示有符號整數,但是幾乎所有的 機器都使用補碼。2.c 語言中預設的整形資料是有符號的,並且允許無符號數和有符號數之間進行轉換。轉換的原則是底層的位保持不變。3.執行運算時,如果乙個運算數是有符號的而另乙個是無符...