C 整數(shù)類型

2018-05-20 15:01 更新

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

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

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

每種類型由不同的關(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。

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

例子


#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é)果。


無符號(hào)整數(shù)類型

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

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

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

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

下表顯示了可以使用的無符號(hào)整數(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ù)變量可以存儲(chǔ)4,294,967,296個(gè)不同的值。

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

以下是無符號(hào)整數(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ù)常量

因?yàn)槟憧梢杂胁煌愋偷恼麛?shù)變量,所以我們有不同類型的整數(shù)常量。

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

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

所以100作為一個(gè)長(zhǎng)的值寫為100L。

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

long my_value = 123456789L;

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

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

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

long long my_value = 123456789LL;

要將常數(shù)指定為無符號(hào)類型,請(qǐng)附加一個(gè)U,如以下示例所示:

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

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

unsigned long long my_value = 9876543212345678ULL;

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

十六進(jìn)制常量

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

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

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

十六進(jìn)制常數(shù)可以有一個(gè)后綴。

以下是十六進(jìn)制常量的一些示例:

0xFFFF
0x123456EE
0xFABABULL

八進(jìn)制常數(shù)

一個(gè)八進(jìn)制值是一個(gè)基數(shù)8。

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

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

014是十進(jìn)制值12的八進(jìn)制等效值。

以下代碼以十進(jìn)制,八進(jìn)制和十六進(jìn)制打印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ù)溢出

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

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

嘗試使用帶符號(hào)和無符號(hào)類型。

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ù)無符號(hào)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)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)