C语言中的整数
C语言中的整数
整数是编程中常用的一种数据,C语言使用int来定义整数。下面一起来看看!
首页C语言教程C语言和内存多文件编程实例精讲项目实践C++教程更多首页/ C语言入门教程/ 变量和数据类型/ C语言中的整数short,int,long
上一节下一节关注我们:新浪微博手机版网站
C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导+ 一对一答疑+ 布置作业+ 项目实践+ 永久学习。QQ在线,随时响应!
整数是编程中常用的一种数据,C语言使用int来定义整数int 是integer 的简写,这在《大话C语言变量和数据类型》中已经进行了详细讲解。
现代操作系统中int 一般占用4个字节内存,共计32位Bit。如果不考虑正负数,当所有的位都为1时它的值最大,为232-1 =
4,294,967,295 ≈ 43亿,这是一个很大的数,实际开发中很少用到,而诸如1、99、__ 等较小的数使用频率反而较高。
使用4个字节保存较小的整数绰绰有余,会空闲出两三个字节来,这些字节就白白浪费掉了,不能再被其他数据使用。现在个人电脑的内存都
比较大了,配置低的也有2G,浪费一些内存不会带来明显的损失;而在C 语言被发明的早期,或者在单片机和嵌入式中,内存都是非常稀缺的资源,所有的程序都在尽力节省内存。
反过来说,43亿虽然已经很大,但要表示全球人口数量还是不够,必须要让整数占用更多的内存,才能表示更大的值。
让整数占用更少的内存可以在int 前边加short,让整数占用更多的内存可以在int 前边加long,例如:
short int a = 10;
short int b, c = 99;
long int m = __;
long int n, p = __;
这样a、b、c 只占用2个字节的内存,而m、n、p 可能占用8个字节的内存。
也可以将int 省略,只写short 和long,如下所示:
short a = 10;
short b, c = 99;
long m = __;
long n, p = __;
这样的写法更加简洁,实际开发中常用。
总结起来,C语言中共有三种整数类型,分别是short、int 和long。int 称为整型,short 称为短整型,long 称为长整型。
整数的长度
C语言并没有严格规定short、int、long 所占用的字节数,只做了宽泛的限制:
short 至少占用2个字节。
int 建议为一个机器字长。32位环境下机器字长为4字节,64位环境下机器字长为8字节。
short 的长度不能大于int,long 的长度不能小于int。
总结起来,它们的长度所占字节数关系为:
short = int = long
这就意味着,short 并不一定真的”短“,long 也并不一定真的.”长“,它们有可能和int 占用相同的字节数。
在16位环境下,short 为2个字节,int 为2个字节,long 为4个字节。16位环境多用于单片机和低级嵌入式系统,在PC和服务器上基本都看不到了。
对于32位的Windows、Linux 和OS X,short 为2个字节,int 为4个字节,long 也为4个字节。PC和服务器上的32位系统占有率也在慢慢下降,嵌入式系统使用32位越来越多。
在64位环境下,不同的操作系统会有不同的结果,如下所示长度以字节计:
操作系统shortintlongWin__类Unix系统(包括Unix、Linux、OS X、BSD、Solaris 等)248
目前我们使用较多的PC系统为Win XP、Win 7、Win 8、Win 10、Mac OS X、Linux,short 和int 的长度都是固定的,分别为2和4,大家
可以放心使用,long 的长度在Win64 和类Unix系统下会有所不同,使用时要注意移植性。
c编程网获取某个数据类型的长度可以使用sizeof 操作符,如下所示:
#include int main short a = 10; int b = 100; long c = 1000; char d = 'X'; int a_length = sizeof a; int b_length = sizeofint; printf“a=%d, b=%d,
c=%d, d=%d ", a_length, b_length, sizeofc, sizeofchar; return 0;
在Win7下的运行结果为:
a=2, b=4, c=4, d=1
sizeof 用来获取某个数据类型或变量所占用的字节数,如果后面跟的是变量名称,那么可以省略,如果跟的是数据类型,就必须带上。
需要注意的是,sizeof 是C语言中的操作符,不是函数,所以可以不带,后面会详细讲解。
不同进制的整数
C语言中的整数除了可以使用十进制,还可以使用八进制和十六进制。
1 八进制
八进制由0~7 八个数字组成,使用时必须以0开头注意是数字0,不是字母o,例如:
//合法的八进制数int a = 015; //十进制为13int b = -0101; //十进制为-65int c = __; //十进制为__//非法的八进制int m = 256; //无前缀0,相当于十进制int n = 03A2; //A不是有效数字
2 十六进制
十六进制由数字0~9、字母A~F 或a~f 组成,使用时必须以0x或0X不区分大小写开头,例如:
//合法的十六进制int a = 0X2A; //十进制为42int b = -0XA0; //十进制为-160int c = 0xffff; //十进制为__//非法的十六进制int m = 5A; //无前缀0Xint n = 0X3H; //H不是有效数字
3 十进制
十进制由0~9 十个数字组成,没有任何前缀,和我们平时的书写格式一样,不再赘述。
注意:C语言中只能使用八进制、十进制和十六进制,不能直接使用二进制,它没有特定的前缀。
各种整数的输出
在使用printf 输出整数时,不同的控制字符会有不同的输出格式。
1 输出int 使用%d,输出short 使用%hd,输出long 使用%ld。请看下面的例子:
#include int main short a = 100; int b = 010; long c = 0XFFFF; printf"a=%hd, b=%d, c=%ld ", a, b, c; return 0;
运行结果:
a=100, b=8, c=__
2 输出十进制使用%d,输出八进制使用%o注意是字母o,不是数字0,输出十六进制使用%x或%X。如果希望带上前缀,可以加#,例
如%#d、%#o、%#x、%#X。请看下面的例子:
#include #include int main int a = 100, b = 0270, c = 0X2F;