C 整數(shù)類型

2018-05-20 15:01 更新

學(xué)習(xí)C - C 整數(shù)類型

帶符號的整數(shù)類型

我們有五種基本類型的變量來存儲帶符號的整數(shù)值,因此可以存儲正值和負值。

每種類型由不同的關(guān)鍵字或關(guān)鍵字的組合指定,如下表所示。

類型名稱字節(jié)數(shù)
signed char1
short2
int4
long4
long long8

以下是這些類型的變量的一些聲明:

short shoe_size; 
int house_number; 
long long star_count;

類型名稱short,long和long long可以寫成short int,long int和long long int,并且可以選擇性地在前面簽署關(guān)鍵字。

但是,這些類型幾乎總是以縮寫形式寫成,如上表所示。

類型int也可以寫為signed int。

您可以存儲的值范圍取決于您使用的特定編譯器。

例子


#include <stdio.h> 
int main(void) 
{ 
      int ten = 10; 
      int two = 2; 
             
      printf("%d minus %d is %d\n", ten, 2, ten - two ); 
   
      return 0; 
}    

上面的代碼生成以下結(jié)果。


無符號整數(shù)類型

一些數(shù)據(jù)總是正的。

對于這些數(shù)據(jù),您不需要提供負值。

對于每個有符號整數(shù),存在相應(yīng)的無符號類型整數(shù),無符號類型與簽名類型占用相同的內(nèi)存量。

每個未簽名的類型名稱是帶有關(guān)鍵字unsigned的前綴的帶符號類型名稱。

下表顯示了可以使用的無符號整數(shù)類型的基本集合。

類型名稱字節(jié)數(shù)
unsigned char1
unsigned short 或 unsigned short int2
unsigned int4
unsigned long 或 unsigned long int4
unsigned long long 或 unsigned long long int8

使用給定的位數(shù),可以表示的不同值的數(shù)量是固定的。

例如,32位整數(shù)變量可以存儲4,294,967,296個不同的值。

使用無符號類型不會提供比對應(yīng)的簽名類型更多的值。

以下是無符號整數(shù)變量聲明的示例:

unsigned int count; 
unsigned long population; 

以下代碼顯示如何聲明unsigned int。


#include <stdio.h> 
int main(void) 
{ 
   unsigned int iResponse = 0; 
   printf("%d", iResponse); 
   
   return 0;
} 

上面的代碼生成以下結(jié)果。

整數(shù)常量

因為你可以有不同類型的整數(shù)變量,所以我們有不同類型的整數(shù)常量。

例如,如果你只寫整數(shù)值100,那將是int類型。

如果你想確定它是長類型,你必須在數(shù)值中附加一個大寫或小寫的字母L.

所以100作為一個長的值寫為100L。

要聲明和初始化變量my_value,您可以這樣寫:

long my_value = 123456789L;

您使用負號寫負整數(shù)常量,例如:

int decrease = -4; 
long  my_value = -100000L;

您可以通過添加兩個L來指定整數(shù)常量為long long類型:

long long my_value = 123456789LL;

要將常數(shù)指定為無符號類型,請附加一個U,如以下示例所示:

unsigned int count = 100U; 
unsigned long value = 999999999UL; 

要存儲最大幅度的整數(shù),您可以定義如下變量:

unsigned long long my_value = 9876543212345678ULL;

ULL指定初始值為unsigned long long類型。

十六進制常量

您可以以十六進制形式編寫整數(shù)值,這是16位。

十六進制數(shù)字的數(shù)字相當(dāng)于十進制值0到15,它們由0到9和A表示為F(或a到f)。

十六進制數(shù)字用前綴 0x 0X 寫入。

十六進制常數(shù)可以有一個后綴。

以下是十六進制常量的一些示例:

0xFFFF
0x123456EE
0xFABABULL

八進制常數(shù)

一個八進制值是一個基數(shù)8。

每個八進制數(shù)字具有從0到7的值,其對應(yīng)于二進制的三位。

以零開始的整數(shù)常數(shù)(如014)將被解釋為八進制數(shù)。

014是十進制值12的八進制等效值。

以下代碼以十進制,八進制和十六進制打印100。

 
#include <stdio.h> 
int main(void) 
{ 
    int x = 100; 
 
    printf("dec = %d; octal = %o; hex = %x\n", x, x, x); 
    printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x); 
 
    return 0; 
}   

上面的代碼生成以下結(jié)果。

整數(shù)溢出

如果一個整數(shù)嘗試為其類型變得太大,會發(fā)生什么?

讓我們設(shè)置一個整數(shù)到它最大的可能值,添加它。

嘗試使用帶符號和無符號類型。

printf()函數(shù)使用%u說明符來顯示unsigned int值。


#include <stdio.h> 
#define PAGES 959 
int main(void) { 
   int i = 2147483647; 
   unsigned int j = 4294967295; 
                 
   printf("%d %d %d\n", i, i+1, i+2); 
   printf("%u %u %u\n", j, j+1, j+2); 


   printf("*%d*\n", PAGES); 
   printf("*%2d*\n", PAGES); 
   printf("*%10d*\n", PAGES); 
   printf("*%-10d*\n", PAGES); 
   return 0; 
}    

整數(shù)無符號int變量j(如里程表)從0開始,但int變量i始于-2147483648。

上面的代碼生成以下結(jié)果。

例2

以下代碼使用整數(shù)類型的便攜式名稱。


#include <stdio.h> 
#include <inttypes.h> // supports portable types 
int main(void) 
  { 
      int32_t me32;     // me32 a 32-bit signed variable 
   
      me32 = 45933945; 
      printf("First, assume int32_t is int: "); 
      printf("me32 = %d\n", me32); 
      printf("Next, let"s not make any assumptions.\n"); 
      printf("Instead, use a \"macro\" from inttypes.h: "); 
      printf("me32 = %" PRId32 "\n", me32); 
   
      return 0; 
  }    

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號