C語言有符號數與無符號數之間的轉換


C語言有符號數與無符號數之間的轉換

無符號數:不存在正負之分,所有位都用來表示數的本身。

有符號數:最高位用來表示數的正負,最高位為1則表示負數,最高位為0則表示正數。

1.無符號數--->有符號數

      看無符號數的最高位是否為1,如果不為1(為0),則有符號數就直接等於無符號數;如果無符號數的最高位為1,則將無符號數取補碼,得到的數就是有符號數。

以unsigned char 和char為例子:

1.1將無符號數2轉為有符號數

2的原碼是:0000 0010,可知最高位不為1,因此轉為有符號數之后也是2。

程序:

 #include <stdio.h>

  int main(void)

  {

         unsigned char i = 2;

 

         printf("%d\n",(char)i);

 

         return 0;

 }

運行結果:2

 

1.2將無符號數130轉為有符號數

130的原碼是:1000 0010,可知最高位為1,因此需要取它的補碼,補碼為1111 1110,這是一個負數,取最高位作為-號,取最低7位作為數值得到的結果是-126。

程序:

 1 #include <stdio.h>

 

  int main(void)

  {

         unsigned char i = 130;

 

         printf("%d\n",(char)i);

 

         return 0;

}

運行結果:-126

 

2.有符號數--->無符號數

      看有符號數的最高位是否為1,如果不為1(為0),則無符號數就直接等於有符號數;如果有符號數的最高位為1,則將有符號數取補碼,得到的數就是無符號數。

以char 和unsigned char為例子:

2.1將有符號數3轉為無符號數

3的原碼是:0000 0011,可知最高位不為1,因此轉為無符號數之后也是3。

程序:

 #include <stdio.h>

 

  int main(void)

  {

         char i = 3;

 

         printf("%u\n",(unsigned char)i);

 

         return 0;

 }

運行結果:3

2.2將有符號數-7轉為無符號數

-7的原碼是:1000 0111,可知最高位為1,因此需要取它的補碼,補碼為1111 1001,這是一個正數,因此整個數的值就是249。

程序:

  #include <stdio.h>

  int main(void)

  {

          char i = -7;

 

          printf("%u\n",(unsigned char)i);

 

          return 0;

 }

運行結果:249

總結:

     有符號數與無符號數之間的轉換,都要看要轉換的數的最高位是否為1,如果不為1,則轉換結果就是要轉換的數的本身;如果為1,則轉換結果就是轉換的數(看作是負數)的補碼。

轉自:https://www.cnblogs.com/lknlfy/archive/2013/04/02/2996320.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM