1. 程式人生 > >有符號和無符號整型數據溢出問題

有符號和無符號整型數據溢出問題

signed BE AI pos 技術分享 south 符號整型 有符號 mark

無符號數都有“unsigned”標誌,如果沒有“unsigned”標誌,則程序默認該數為有符號數“signed”。
無符號數可正可負 ,有符號數一定為正。由於有符號與無符號數所占用的字節數相同,因此無符號數所允許的最大值比有符號數的大一倍。如 ,無符號短整型數的數值範圍是0到65535,而有符號短整型數的範圍是-32768到32767.

1.無符號整數溢出問題:

int main()  
{  
     unsigned short int b=0;  
     b=65535;  
     cout<<"b before is:"<<b<<endl;  
     cout
<<"b after is:"<<++b<<endl; return 0; }

結果:

技術分享圖片

分析:b為最大值65535時,自增1後,滿足溢出條件 ,此時b值為0.

1.有符號整數溢出問題:

int main()  
{  
     short int a=0;  
         a=32767;  
     cout<<"a before is:"<<a<<endl;  
     cout<<"a after is:"<<++a<<endl;  
     cout
<<"a after is:"<<++a<<endl; return 0; }

結果:

技術分享圖片

分析:a為最大值32767時,自增1後,滿足溢出條件 ,此時b值為-32768.

有符號和無符號整型數據溢出問題