`

C语言的三种整型数据类型:int、short int和long int

阅读更多


int数据类型的位数为16位,short int数据类型的位数也是16位。而long int的位数为32位,可用来存储比较大的整数。

short int 和 long int可以缩写为short 和 long。

             C语言中的整型数据类型int、short int 和 long int

 

名称 全称类型说明符 缩写类型说明符       位数                     范围
整型 int int 16位      -32768至+32767 
无符号整型 unsigned int  unsigned 16位 0 至 65,535 
短整型 short int  short 16位 -32768至+32767 
无符号短整型      unsigned short int     unsigned short 16位 0 至 65,535 
长整型 long int  long 32位 -2,147,483,648 至 2,147,483,647

 

无符号长整型      unsigned long int      unsigned long         32位       0至4,294,967,295

 

               

整型变量的声明方式:

int sum;
long int population;
unsigned int sum;

 

在一个语句中声明多个属于同一类型的变量:

int withd, height;

int 类型的变量初始化方式:

withd = 150; //前面已经声明,在此进行初始化

int height = 60; //直接在一个语句中进行声明和初始化

 

 



C语言中整型常量有三种不同的表示形式:

     1、八进制整型常量:在八进制数值前面加前缀“0”,其数码取值为0~7。例如:054、0567、05421。

     2、十六进制整型常量:前缀为“0X”或“0x“,其数码取值为0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。

     3、十进制整型常量:既无前缀也无后缀。例如:254、745、890等。 如将存储为long类型,需要在数字序列最后附一个字母L 或 l 作为后缀。例如:245L、7850L、124l等

 

 

 

 

 

1. 其它整数类型
    int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求。C 语言还提供了四个可以修饰 int 的关键字:shortlongsigned,以及 unsigned。利用这四个关键字,C 语言标准定义了以下整数类型:

      1) short int(可简写为 short),和 int 一样,也是有符号整数
      2) long int(简写:long),有符号整数
      3) long long int(简写:long long),C99 标准添加的类型,
         有符号整数
      4) unsigned int(简写:unsigned),无符号整数,不能表示负数
      5) unsigned long int(简写:unsigned long),无符号整数,
         不能表示负数
      6) unsigned short int(简写:unsigned short),无符号整数,
         不能表示负数
      7) unsigned long long int(简写:unsigned long long),
         C99 添加的类型,无符号整数
      8) 所有没有标明 unsigned 的整数类型默认都是有符号整数。
         在这些整数类型前面加上 signed 可以使读者更清楚地知道
         这些是有符号整数,尽管有没有 signed 都表示有符号整数。
         例如:signed int 等同于 int 。

    一般我们把 short 称为短整型,把 long 称为长整型,把 long long 称为超长整型,把 int 称为整型。unsigned 打头的那些整数类型统称为无符号整型。例如:我们称 unsigned short 为无符号短整型。以此类推。

2. 声明方式
    这些整数类型的声明方式与 int 类型的声明方式一样。例如:
        long int estine;
        long johns;
        short int erns;
        short ribs;
        unsigned int s_count;
        unsigned players;
        unsigned long headcount;
        unsigned short yesvotes;
        long long ago;  
/* C99 特有 */
        unsigned long long ego;  /* C99 特有 */

如果您的编译器不支持 C99 标准,那就不能使用 long long 和 unsigned long long。

3. 取值范围(表示范围)
    标准也规定了这些整数类型的最小取值范围。short 的最小表示范围和 int 一样,都是-32767 到 32767 。也就是 -(2^15 - 1)到(2^15 - 1)。其中,2^15表示 2 的 15 次方。类似地,2 的 20 次方记作2^20 ,以此类推。注意:C 语言中 2^15 并不表示 2 的 15 次方,为了书写方便,我们姑且这么表示。long 的最小取值范围是 -2147483647 到 2147483647 。也就是 -(2^31 - 1) 到 (2^31 - 1) 。unsigned short的最小表示范围和unsigned int 一样,都是 0 到 65535(2^16 - 1)。unsigned long 的最小取值范围是 0 到 4294967295(2^32 - 1)。long long的最小取值范围是 -9223372036854775807(-(2^63 - 1))到 9223372036854775807(2^63 - 1);unsigned long long 是 0 到 18446744073709551615(2^64 - 1)。
    标准规定,int 的表示范围不能小于 short 的表示范围,long 的表示范围不能小于 int 的表示范围。这就是说 short 型变量占用的空间可能比 int 型变量少,而 long 型变量占用的空间可能比 int 型变量多。16 位(bit)的计算机中,int 和 short 一般都是 16 位,而 long 是 32位;32位的计算机中,short一般是 16 位,而long和int是 32位。TC2(16位的编译器)中,int是16位的;而 Dev-C++(32 位的编译器)中,int 是 32 位的。
    使用 unsigned int 声明的变量只能表示非负整数(0 和正整数)。如果 int 是 16 位的话,那么 unsigned int 的表示范围是 0 到 65535(2^16 - 1)。这是因为 unsigned 不需要符号位,可以把 16 个位全都用于表示整数。而 int 需要一个位作为符号位,用于表示正负,只有 15 个位用于表示整数。
    目前,long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。具体某个编译器到底使用多少位来表示这些类型,我们可以用运算符 sizeof 来获取。例如:
          printf( "%lu\n", (unsigned long)sizeof(int) * 8 );  
/* 输出 int 的位数 */
          printf( "%zu\n", sizeof(short) * 8 );  /* 输出 short 的位数 */
    sizeof 运算符返回其操作数占用空间的大小,以字节(Byte)为单位。注意,C 定义字节的大小为 char 类型的大小。char 通常是 8 位(bit)的,当然也可以更大。这里我们假设 char 是 8 位的。点击查看 char 类型详细介绍
    sizeof 的用法我们以后会讲到,现在只要有个印象就好了。第二句中的 %zu 是 C99 特有的,如果您的编译器不支持 C99(准确地说,应该是如果您的编译器使用的库函数不支持 C99),运行结果将会出错。

4. 整数类型的选择
    如果您要处理的只是非负整数,那么应该优先使用 unsigned 打头的那些整数类型。如果您要处理的整数超出了 int 所能表示的范围,并且您的编译器中,long 的表示范围比 int 大,那就使用 long。不过,若非必要,尽量不要用 long,因为它可能会降低程序运行效率。有一点要注意:如果您的编译器中,long 和 int 都是 32 位的,并且您需要使用 32 位整数,那么应该用 long,而不要用 int。只有这样,我们的程序才可以安全地移植到 16 位的计算机,因为 16 位的计算机中,int 一般也是 16 位的。类似地,如果您需要使用 64 位整数,那就用 long long。如果 int 是 32 位的话,那么使用 short 可以节省空间,不过您得确保您要处理的整数不会超出 short 的表示范围。这种“节省”对内存大的计算机来说,是没什么意义的。

5. long 型常量和 long long 型常量
    一般来说,整数常量是被当作 int 类型来存储的。如果我们使用的整数常量超出了 int 的表示范围,C 语言规定编译器自动使用 unsigned int 来处理这个常量。如果 unsigned 也不足以表示这个常量的话,编译器就会用 long。如果还表示不了的话,那就依次用 unsigned long,long long,unsigned long long。如果 unsigned long long 也表示不了,那么编译器就没辙了。注意:long long 和 unsigned long long 是 C99 特有的。例如:如果 int 是 16 位的话,它就表示不了常量 1000000。编译器会使用 long 来处理这个常量,因为 unsigned int 也表示不了 1000000 。
    同样,十六进制和八进制整数常量通常也是被作为 int 来处理。但是,当我们使用的常量超出了 int 的表示范围后,编译器会依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的类型足以表示那个常量为止。
    有时,我们使用的是较小的常量,但是我们希望这个常量被当作 long 来处理,这就需要在这个常量后面加上后缀 l(小写字母 l)或者 L(大写字母 L)。我们应该避免使用 l ,因为 l 容易和数字 1 混淆。例如:整数常量 7 是被作为 int 来处理的,但整数常量 7L(或者 7l)是被作为 long 来处理的。类似地,在整数常量后面加上后缀 ll 或者 LL ,这个常量就会被当作 long long 来处理。例如:3LL 。如果想使用无符号整数常量的话,还要配合使用后缀 u 或者 U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。
    这些后缀也可以用于十六进制和八进制整数常量。例如:020L,010LL,0x30uL,0x40ull 。
参考资料:
C Primer Plus, 5th Edtion By Stephen Prata
          The C Programming Language 2e By K&R
          C99 标准

 

 

 

 

整型常量

十进制、八进制和十六进制的整型常量可加后缀以指示类型,如下表所示。

表 2–1 数据类型后缀

后缀

类型

uU

unsigned

lL

long

llLL

long long [long longunassigned long long-xc99=none-Xc 模式下不可用。]

luLULulUuluLUlUL

unsigned long

lluLLULLullUullULLuLL Ull

unsigned long long

 

 

如果设置 -xc99=all,编译器将根据常量大小,使用以下列表中可以表示该值的第一项:

  • int

  • long int

  • long long int

如果值超过 long long int 可表示的最大值,编译器会发出警告。

如果设置 -xc99=none,则为无后缀常量指定类型时,编译器将根据常量大小,使用以下列表中可以表示该值的第一项:

  • int

  • long int

  • unsigned long int

  • long long int

  • unsigned long long int

分享到:
评论

相关推荐

    C语言常见几中图形打印代码

    现已经历过几个步骤:从简单的了解操作平台Xcode开始,到熟悉基本的数据类型:整型:int、long、short;字符型:char;实型:float、double。然后接触到编程语言的分支结构分类——顺序、分支、循环。其中循环是重点...

    C语言程序设计题库 第二章:数据类型、运算符和表达式

    三、当系统定义short int与int占内存长度相同,则两种类型常量均可以赋给 int和short int型变量。四、在整型常量后面加大写L或小写l,则告诉编译器,把该整型常量作为long类型处理。例:123L、0L。五、在整型常量...

    详解C语言中的char数据类型及其与int类型的转换

    char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed。虽然char在标准中是unsigned(因为char类型提出的初衷是用来表示ascii码,ascii码的范围是0~127),但实际...

    C语言程序设计-整型数据.pptx

    根据占用内存空间大小的不同,可将整型变量分为4种类型。 2-2 整型变量 整型数据类型 取 值 范 围 存储字节数 short [int] -32 768~32 767 即-215~(215-1) 2 int -32 768~32 767 即-215~(215-1) 2 long [in

    类c语言词法分析器3.0

    (1) 关键字:int,long,float,double,char,short,void,if,else,for,while,do,break,switch, continue,case,default,return,static,struct (2) 运算符:+,-,*,/,%,>,<,=,!=,==,,>=,++,--,!,&,&&,||,[] (3) ...

    c语言入门教程.txt

    整型变量又可具体分为好几种,最基本的整型变量是用类型说明符int声明的符号整型,形式如下: int Counter; 这里int是类型说明符,Counter是变量的名字。 整型变量可以是有符号型、无符号型、长型、短型或象上面定义...

    C语言中的所有关键字

    (5) int: 声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明共用体(联合)...

    C语言结构体的一些理解

    int:基本整型,用于存储整数,占4个字节,默认值为0 short:短整型,占2个字节 long:长整型,占4个字节 long long:双长整型,占8个字节,比较少用 2、浮点型 float:单精度浮点型,占4个字节 double:双精度浮点...

    C语言一图流总结PDF

    C语言提供了基本的数据类型,包括整型(int、char、short、long)、浮点型(float、double)、字符型(char)、布尔型(_Bool)等。 用户还可以通过typedef关键字自定义新的数据类型,方便代码维护和阅读。 运算符:...

    C语言程序设计标准教程

    无符号型又可与上述三种类型匹配而构成: (1)无符号基本型 类型说明符为unsigned int或unsigned。 (2)无符号短整型 类型说明符为unsigned short (3)无符号长整型 类型说明符为unsigned long 各种无符号类型量所占的...

    C_gjz.rar_float

    C语言中的关键字 auto :声明自动变量 一般不使用 double :声明双精度变量或函数 float:声明浮点型变量或函数 int: 声明整型变量或函数 short :声明短整型变量或函数 long :声明长整型变量或函数 struct:声明...

    标准MFC WinSock ActiveX控件开发实例

    //只对网络断开和数据到达通知感兴趣 if(iError == SOCKET_ERROR)//无法绑定Winsock的事件通知 { shutdown(OnlySock, 0x02); closesocket(OnlySock);//释放占有的SOCK资源 return FALSE; } ...

    C语言解析教程(原书第4版)(美) 凯利.pdf

    3.5 整数类型short、long和unsigned 3.6 浮点类型 3.7 typedef的用法 3.8 sizeof操作符 3.9 使用getchar()和putchar() 3.10 数学函数 3.10.1 使用abs()和fabs() 3.10.2 unix和数学函数库 3.11 隐式类型转换...

    C语言关键字大全(共32个)

    C语言一共有32个关键字,如下所述: auto :声明自动变量 short :声明短整型变量或函数 int: 声明整型变量或函数 long :声明长整型变量或函数 float:声明浮点型变量或函数 double :声明双精度变量或函数 char ...

    java课后练习题答案

    Java中定点类型都是有符号数 ,包括byte(字节型) 、short(短整型) 、int(整型)和long(长整型),分别占据1、2、4、8个字节。Java中各种数据类型占用固定的内存长度,与具体的硬件平台无关,体现了Java的跨...

    c语言整型的scanf和printf的格式限定符.jpg

    整型(int、long int 、short等)下十进制、八进制、十六进制的输入输出控制符

    编译原理c语言词法分析器

    关键字:"long", "float", "static", "char", "short", "switch", "int", "const", "if", "then", "else", "for", "while", "break"。 常数:任何整型常数 标识符:字母打头的字母数字串。 <标识符>→<标识符><字母...

    你必须知道的495个C语言问题.pdf

    然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char *p1, p2; 我在使用p2的时候...

    C语言教程基础

    类型说明符 数的范围 分配字节数short -32768~32767 ■■unsigned short 0~65535 ■■int -2147483648~2147483647 ■■■■ unsigned int 0~4294967295 ■■■■long int -2147483648~2147483647 ■■■■...

    《你必须知道的495个C语言问题》

    然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 2  1.4 新的64位机上的64位类型是什么样的? 3 指针声明 3 1.5 这样的声明有什么问题?char *p1, p2; 我...

Global site tag (gtag.js) - Google Analytics