C語言 有符號、無符號


C語言 有符號、無符號

有符號無符號說明

一、有符號 signed

  • char 8bit 取值范圍:-2^7 ~ 2^7-1 、 -128~127

  • int 32bit 取值范圍:-2^31 ~ 2^31-1 、 -2147483648~2147483647

  • long long 64bit 取值范圍:-2^63 ~ 2^63-1

#include <stdio.h>

int main()
{
    signed int a = -1089474374; //定義有符號整型變量a
    printf("%X\n", a); //結果為 BF0FF0BA

    //B    F    0    F    F    0     B   A
    //1011 1111 0000 1111 1111 0000 1011 1010

    return 0;
}

注:數據存儲時將-0對應的區間值設置為最小值 -2^7

二、無符號 unsigned

1、說明

數據存儲在計算機中不存在符號位

無符號數最高位不是符號位,而就是數的一部分,無符號數不可能是負數。

#include <stdio.h>

int main()
{
    unsigned int a = 3236958022; //定義無符號整型變量a
    printf("%X\n", a); //結果為 C0F00F46

    return 0;
}

 2、詳解

當我們寫程序要處理一個不可能出現負值的時候,一般用無符號數,這樣可以增大數的表達最大值。

  • char 8bit 取值范圍:0~2^8-1、0~255

  • int 32bit 取值范圍:0~2^32-1、0~4294967295

3、表范圍

數據類型

占用空間

取值范圍

short

2字節

-32768 到 32767 (-215 ~ 215-1)

int

4字節

-2147483648 到 2147483647 (-231 ~ 231-1)

long

4字節

-2147483648 到 2147483647 (-231 ~ 231-1)

unsigned short

2字節

0 到 65535 (0 ~ 216-1)

unsigned int

4字節

0 到 4294967295 (0 ~ 232-1)

unsigned long

4字節

0 到 4294967295 (0 ~ 232-1)

數據溺出說明

當超過一個數據類型能夠存放最大的范圍時,數值會溢出。

有符號位最高位溢出的區別:符號位溢出會導致數的正負發生改變,但最高位的溢出會導致最高位丟失。

#include <stdio.h>
 
int main()
{
       char ch;
 
       //符號位溢出會導致數的正負發生改變
       ch = 0x7f + 2; //127+2
       printf("%d\n", ch);
       //     0111 1111
       //+2后 1000 0001,這是負數補碼,其原碼為 1111 1111,結果為-127
 
       //最高位的溢出會導致最高位丟失
       unsigned char ch2;
       ch2 = 0xff+1; //255+1
       printf("%u\n", ch2);
       //       1111 1111
       //+1后 10000 0000, char只有8位最高位的溢出,結果為0000 0000,十進制為0
 
       ch2 = 0xff + 2; //255+1
       printf("%u\n", ch2);
       //       1111 1111
       //+1后 10000 0001, char只有8位最高位的溢出,結果為0000 0001,十進制為1
 
       return 0;
}

 


免責聲明!

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



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