C语言整数的取值范围
整数是我们生活中常用的数据类型,也是编程中常用的一种数据,C语言使用int关键字来定义整数变量(int是 integer 的简写)。
在定义变量的时候,可以加signed、unsigned、short和long四种修饰符。
signed:有符号的,可以表示正数和负数。
unsigned:无符号的,只能表示正数,例如数组的下标、人的身高等。
short:短的,现在主流的64位操作系统下,整数占用内存4个字节,使用 4
个字节保存较小的整数绰绰有余,会空闲出两个字节来,这些字节就白白浪费掉了。在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽可能节省内存。
long:长的,更长的整数。
1、整数的取值范围
整数的取值范围与计算机操作系统和C语言编译器有关,没有一个固定的数值,我们可以根据它占用的内存大小来推断它的取值范围。
一个字节有8个位,表示的数据的取值范围是28-1,即255。
如果占用的内存是两个字节,无符号型取值范围是28ⅹ28-1。
如果占用的内存是四个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28-1。
如果占用的内存是八个字节,无符号型取值范围是28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28ⅹ28-1。
如果是有符号,取值范围减半,因为符号占一个位。
下面用一个示例代码来测试各种整数占用内存的大小。
示例(book60.c)
/*
* 程序名:book60.c,此程序演示整数占用内存的大小和取值范围。
* 作者:C语言技术网(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
int main()
{
short si; // 短整数
int ii; // 整数
long li; // 长整数
printf("sizeof short is %d\n",sizeof(short));
printf("sizeof int is %d\n",sizeof(int));
printf("sizeof long is %d\n",sizeof(long));
}
运行效果
sizeof是C语言中保留关键字,是一种运算符,不是函数,sizeof实际上是获取了数据在内存中所占用的存储空间,以字节为单位。
int ii; // sizeof(int)和sizeof(ii)都可以。
根据book60.c的测试结果,我们可以得到各种整数的取值范围。
类型简写 | 类型全称 | 长度 | 取值范围 |
---|---|---|---|
short | [signed] short [int] | 2字节 | -32768~32767 |
unsigned short | unsigned short [int] | 2字节 | 0~65535 |
int | [signed] int | 4字节 | -2147483648~2147483647 |
unsigned int | unsigned [int] | 4字节 | 0~4294967295 |
long | [signed] long [int] | 8字节 | -9223372036854775808~ 9223372036854775807 |
unsigned long | unsigned long [int] | 8字节 | 0~18446744073709551615 |
注意:
1)计算机用最高位1位来表达符号,unsigned修饰过的正整数不需要符号位,在表达正整数的时候比signed修饰的正整数取值大一倍。
2)在写程序的时候,上表中括号[]的单词可以省略不书写。
3)在写程序的时候,给整数变量赋值不能超出变量的取值范围,编译的时候会出现类似以下的错误,程序运行也可能产生不可预后的后果。
4)现在计算机的内存不值钱,建议程序员少用short,慎用int,多用long,内存不是问题,程序的稳定高于一切。
2、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!