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)

作者:码农有道

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

posted @ 2020-04-13 15:53  码农有道  阅读(2405)  评论(0编辑  收藏  举报