signed int與usigned int轉換(有符號變量與無符號變量)


  • 數據存儲方式
    • 計算機中數據都是以二進制進行存儲的  正數為原碼形式,負數為二進制補碼形式
    • 假定以字長為兩個字節的機器為例int a=7
    • signed int a=7    存儲方式:0000 0000 0000 0111
    • signed int a=-7   存儲方式: 1111 1111 1111 1001
    • unsigned int a=7 存儲方式:0000 0000 0000 0111
    • -1是最大的負整數,轉換成正整數也是最大的
  • 實例代碼
    •  1 #include <stdio.h>  
       2   
       3 char getChar (int x,int y)  
       4 {  
       5     char c;   
       6     unsigned int a = x;  
       7   
       8     (a+y > 10) ? (c = 1): (c = 2);  
       9   
      10     return c;  
      11 }   
      12   
      13 int main (void)  
      14 {  
      15     char c1 = getChar(7,4);  
      16     char c2 = getChar(7,-7);  
      17     char c3 = getChar(7,-8);  
      18     char c4 = getChar(-6,7);  
      19       
      20     printf("c1 = %d\n",c1);  
      21     printf("c2 = %d\n",c2);  
      22     printf("c3 = %d\n",c3);  
      23     printf("c4 = %d\n",c4);  
      24       
      25     return 0;  
      26 }  

      運行結果:c1=1,c2=2,c3=2,c4=1;

    • 當表達式中同時存在有符號類型與無符號類型時,所有的操作數都將自動轉換成無符號類型
      •   c3分析
      • y將自動轉換成無符號類型
      • y=-7在計算機中的存儲為1111 1111 1111 1001    a=7存儲為0000 0000 0000 0111
      • a+y=0000 0000 0000 0000  溢出  所以值為0
      • c4分析
      • y=-8存儲為 1111 1111 1111 0111     a=7存儲為0000 0000 0000 0111
      • a+y=1111 1111 1111 1111  即最大的整數   肯定大於10  所以c4=1;


免責聲明!

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



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