c语言的基本整型(int)和短整型(short)又啥不一样?这些有啥用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的基本整型(int)和短整型(short)又啥不一样?这些有啥用?相关的知识,希望对你有一定的参考价值。

区别在于:占用字节数的大小。

占用字节数的排列关系:

short <= int <= long

C语言定义:

    short 至少占用2个字节。

    int 建议为一个机器字长。32位环境下机器字长为4字节,64位环境下机器字长为8字节。

    short 的长度不能大于 int,long 的长度不能小于 int。

区分多个数值类型,其用处在于不同的场合,对于数值的精度要求和占用字节数要求不同,比如:

月份只有12个月,1月不超过31天,如果用 short 分别定义 月份 和 日期,则最少占用4个字节就可以了;而如果用 int 来定义,则最少需要占用 8 个字节。

2 字节 和 4 字节看起来差距不大,但如果数据量很大,累积起来也是挺可观的,尤其是在网络传输过程及某些特定场合,占用的字节数越少,代表着速度越快、效率越高。

参考技术A C++标准规定,int占一个机器字长。在32位系统中int占32位,也就是4个字节,而在老式的16位系统中,int占16位,即2个字节。而C++标准中只限制规定short int不能超过int的长度,具体长度的可以由C++编译器的实现厂商自行决定。目前流行的32位C++编译器中,通常int占4字节,short int占2字节。其中short int可以简写为short。类似地,C++标准只限制了long int不得小于int的长度,具体也没有作出限制。本回答被提问者采纳

C和C指针小记

1、C语言基本数据类型-整型

仅有4中机泵数据类型:整型,浮点型,指针,聚合类型(数组和结构)

整型家族:字符,短整型,整型,长整型.(都分有符号[singed]和无符号[unsinged])

短整型,整型,长整型之间的大小规则:

长整型至少应该和整型一样长,而整型至少应该和短整型一样长.

变量的最小范围
类型 最小范围
char   0 ~ 127
signed char -127~127
unsigned char 0~255
short int -32767~32767
unsigned short int 0 ~ 65535
int  -32767 ~ 32767
unsigned int 0 ~ 65535
long int -2147483647~2147283647
unsigned long int 0~4294967295

 

 

 

 

 

 

 

 

 

 

 

 

也可参考limit.h 头文件,查看不同类型的特点.

2、char的有符号与无符号之分

设计char类型变量的目的是为了让它们容纳字符型值,但字符在本质上是小整型.缺省的char要么是signed char, 要么是 unsigned char,这取决于编译器.

这意味着不同机器上的char可能拥有不同范围的值.所以,只有当程序所使用的char 型变量的值位于signed char 和 unsigned char 的交集中,这个程序才是可移植的.

例如ASCII字符集中的字符都是位于这个范围之内的.

在一个把字符当作小整型值的程序中,如果显式的把这类变量声明为signed 或  unsigned,可以提高这类程序的可移植性.

这类做法可以确保不同的机器中在字符是否为有符号值方面保持一致.另一方面,有些机器在处理 signed char 时得心应手,如果硬把它改成

unsigned char ,效率可能受损,所以把所有的char 变量统一生成 signed 或 unsigned未必是上上之策.

而且,许多处理字符的库函数把他们的参数声明为char,如果你把参数显式的声明为 unsigned char 或者 signed char.可能会带来兼容性问题.

3、整型字面值

字面值(literal)这个术语是字面值常量的缩写,一种指定了自身的值并且不允许发生改变.

和普通变量极为类似,区别是字面值被初始化之后不允许修改.

当一个程序中出现字面值时,它是属于整型家族9种中的哪一种呢?答案取决于字面值是如何书写的.也可以在某些字面值后面添加一个后缀来改变缺省的规则.

如:在整数字面值后面加字符L或l,可以是这个整数被解释为long整型值,字符U或者u则用于把数值指定为 unsigned整型值.

 

字符常量.

他们的类型总是int.你不能在他们后面添加unsigned 或 long 后缀.字符常量就是一个用单引号包围起来的单个字符(字符转义序列或三字母词).

如:‘M‘   ‘ ‘    ‘??)‘     ‘337‘

C标准也允许诸如‘abc‘这类的多子节字符常量,但它们的实现在不同的环境中可能不一样,所以不鼓励使用.

如果一个多字节字符常量的前面有一个L,那么它就是宽字符常量(wide character literal)

如: L‘X‘   L‘e^‘

当运行时环境支持一种宽字符集时,就可能使用他们.

注意:

整型字面值的书写形式有很多,但是对编译器来讲都一样.

如何把一个字符转换为二进制值:  value = value - ‘0‘;

 

枚举类型:

枚举(enumerated)类型就是指它的值为符号常量而不是字面值的类型.他们以下面这种形式声明:

 

enmu Jar_Type{

  CUP,

  PINT,

  QUART,

  HALF_GALLON,

  GALLON

}; 

 

这样就声明来一个枚举类型,称为Jar_Type.

声明该类型的变量方式:

enmu Jar_Type milk_jug, gas_can, medicine_bottle;

 

如果某种特别的枚举类型的变量只是用一个声明,你可以把上面两条语句组合成:

enum {

  CPU,

  PINT,

  QUART,

  HALF_GALLON,

  GALLON

}  milk_jug, gas_can, medicine_bottle;

 

 这种类型的变量是以整型的方式存储的,这些符号名的实际值都是整型值.

如CPU是0, PINT是1,以此类推.

当然也可以为这些符号指定特定的值,

enum {

  CPU = 8,

  PINT = 16,

  QUART = 32,

  HALF_GALLON = 64,

  GALLON = 128

}; 

 

以上是关于c语言的基本整型(int)和短整型(short)又啥不一样?这些有啥用?的主要内容,如果未能解决你的问题,请参考以下文章

C语言各个数据类型取值范围

C和C指针小记

C语言之数据类型(知识点8)

C语言 四种基本数据类型

[C语言进阶]数据的存储

林昊2