整数是编程中常用的一种数据,C语言通常使用int来定义整数(int 是 integer 的简写)。

在现代操作系统中,int 一般占用 4 个字节(Byte)的内存,共计 32 位(Bit)。如果不考虑正负数,当所有的位都为 1 时它的值最大,为 232-1 = 4,294,967,295 ≈ 43亿,这是一个很大的数,实际开发中很少用到,而诸如 1、99、12098 等较小的数使用频率反而较高。

使用 4 个字节保存较小的整数绰绰有余,会空闲出两三个字节来,这些字节就白白浪费掉了,不能再被其他数据使用。现在个人电脑的内存都比较大了,配置低的也有 2G,浪费一些内存不会带来明显的损失;而在C语言被发明的早期,或者在单片机和嵌入式系统中,内存都是非常稀缺的资源,所有的程序都在尽力节省内存。

反过来说,43 亿虽然已经很大,但要表示全球人口数量还是不够,必须要让整数占用更多的内存,才能表示更大的值,比如占用 6 个字节或者 8 个字节。

让整数占用更少的内存可以在 int 前边加 short,让整数占用更多的内存可以在 int 前边加 long,例如:

short int a = 10;
short int b, c = 99;
long int m = 102023;
long int n, p = 562131;

这样 a、b、c 只占用 2 个字节的内存,而 m、n、p 可能会占用 8 个字节的内存。

也可以将 int 省略,只写 short 和 long,如下所示:

short a = 10;
short b, c = 99;
long m = 102023;
long n, p = 562131;

这样的写法更加简洁,实际开发中常用。

int 是基本的整数类型,short 和 long 是在 int 的基础上进行的扩展,short 可以节省内存,long 可以容纳更大的值。

short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。

整型的长度

细心的读者可能会发现,上面我们在描述 short、int、long 类型的长度时,只对 short 使用肯定的说法,而对 int、long 使用了“一般”或者“可能”等不确定的说法。这种描述的言外之意是,只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现。

一种数据类型占用的字节数,称为该数据类型的长度。例如,short 占用 2 个字节的内存,那么它的长度就是 2。

实际情况也确实如此,C语言并没有严格规定 short、int、long 的长度,只做了宽泛的限制:

  • short 至少占用 2 个字节。

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

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

总结起来,它们的长度(所占字节数)关系为:

2 ≤ short ≤ int ≤ long

这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。

在 16 位环境下,short 的长度为 2 个字节,int 也为 2 个字节,long 为 4 个字节。16 位环境多用于单片机和低级嵌入式系统,在PC和服务器上已经见不到了。

对于 32 位的 Windows、Linux 和 Mac OS,short 的长度为 2 个字节,int 为 4 个字节,long 也为 4 个字节。PC和服务器上的 32 位系统占有率也在慢慢下降,嵌入式系统使用 32 位越来越多。

在 64 位环境下,不同的操作系统会有不同的结果,如下所示:

操作系统

short

int

long

Win64(64位 Windows)

2

4

4

类Unix系统(包括 Unix、Linux、Mac OS、BSD、Solaris 等)

2

4

8

目前我们使用较多的PC系统为 Win XP、Win 7、Win 8、Win 10、Mac OS、Linux,在这些系统中,short 和 int 的长度都是固定的,分别为 2 和 4,大家可以放心使用,只有 long 的长度在 Win64 和类 Unix 系统下会有所不同,使用时要注意移植性。

sizeof 操作符

获取某个数据类型的长度可以使用 sizeof 操作符,如下所示:

#include<stdio.h>
intmain()
{
short a =10;
int b =100;int short_length =sizeof a;
int int_length =sizeof(b);
int long_length =sizeof(long);
int char_length =sizeof(char);printf("short=%d, int=%d, long=%d, char=%d\n", short_length, int_length, long_length, char_length);return0;
}

在 32 位环境以及 Win64 环境下的运行结果为:

short=2, int=4, long=4, char=1

在 64 位 Linux 和 Mac OS 下的运行结果为:

short=2, int=4, long=8, char=1

sizeof 用来获取某个数据类型或变量所占用的字节数,如果后面跟的是变量名称,那么可以省略( ),如果跟的是数据类型,就必须带上( )。

需要注意的是,sizeof 是C语言中的操作符,不是函数,所以可以不带( ),后面会详细讲解。

不同整型的输出

使用不同的格式控制符可以输出不同类型的整数,它们分别是:

  • %hd用来输出 short int 类型,hd 是 short decimal 的简写;

  • %d用来输出 int 类型,d 是 decimal 的简写;

  • %ld用来输出 long int 类型,ld 是 long decimal 的简写。

下面的例子演示了不同整型的输出:

#include<stdio.h>
intmain()
{
short a =10;
int b =100;
long c =9437;printf("a=%hd, b=%d, c=%ld\n", a, b, c);
return0;
}

运行结果:

a=10, b=100, c=9437

在编写代码的过程中,我建议将格式控制符和数据类型严格对应起来,养成良好的编程习惯。当然,如果你不严格对应,一般也不会导致错误,例如,很多初学者都使用%d输出所有的整数类型,请看下面的例子:

#include<stdio.h>
intmain()
{
short a =10;
int b =100;
long c =9437;printf("a=%d, b=%d, c=%d\n", a, b, c);
return0;
}

运行结果仍然是:

a=10, b=100, c=9437

当使用%d输出 short,或者使用%ld输出 short、int 时,不管值有多大,都不会发生错误,因为格式控制符足够容纳这些值。

当使用%hd输出 int、long,或者使用%d输出 long 时,如果要输出的值比较小(就像上面的情况),一般也不会发生错误,如果要输出的值比较大,就很有可能发生错误,例如:

#include<stdio.h>
intmain()
{
int m =306587;
long n =28166459852;
printf("m=%hd, n=%hd\n", m, n);
printf("n=%d\n", n);return0;
}

在 64 位 Linux 和 Mac OS 下(long 的长度为 8)的运行结果为:

m=-21093, n=4556

n=-1898311220

输出结果完全是错误的,这是因为%hd容纳不下 m 和 n 的值,%d也容纳不下 n 的值。

读者需要注意,当格式控制符和数据类型不匹配时,编译器会给出警告,提示程序员可能会存在风险。

编译器的警告是分等级的,不同程度的风险被划分成了不同的警告等级,而使用%d输出 short 和 long 类型的风险较低,如果你的编译器设置只对较高风险的操作发出警告,那么此处你就看不到警告信息。

C语言中的整数(short,int,long)相关推荐

  1. c语言中短整形字节,C语言中的整数(short,int,long)

    C语言中的整数(short,int,long) 整数是编程中常用的一种数据,C语言使用int来定义整数(int 是 integer 的简写).欢迎大家阅读!更多相关信息请关注相关栏目! 现代操作系统中 ...

  2. C语言中取整数的几种方法

    C语言中取整数的方法 1.强制转换(int) #include <stdio.h> #include <math.h> int main(){float a = 2.718;i ...

  3. c语言乘法超过长整数,C语言中超大整数乘法运算

    <C语言中超大整数乘法运算>由会员分享,可在线阅读,更多相关<C语言中超大整数乘法运算(8页珍藏版)>请在人人文库网上搜索. 1.C 语言中超大整数乘法运算在计算机中,长整型 ...

  4. 用C语言计算超大乘法,C语言中超大整数乘法运算.docx

    C语言中超大整数乘法运算.docx .C 语言中超大整数乘法运算在计算机中,长整型 long int 变量的范围是 -2147483648 至 2147483647 ,因此若用长整型变量做乘法运算,乘 ...

  5. 算法分析c语言大整数乘法,C语言中超大整数乘法运算

    <C语言中超大整数乘法运算>由会员分享,可在线阅读,更多相关<C语言中超大整数乘法运算(9页珍藏版)>请在人人文库网上搜索. 1.C 语言中超大整数乘法运算在计算机中,长整型 ...

  6. 2.2.3 C语言中的整数类型及类型转换(为什么强制类型转换值发生改变?带你从机器码的角度分析)

    文章目录: 首先看一下c语言整数数据类型范围 1.有符号数和无符号数的转换(相同字长) 2.不同字长整数之间的转换 (1)大字长变量向小字长变量强制类型转换 (2)小字长变量向大字长变量强制类型转换 ...

  7. C语言中定义整数的一个小疑问

    下面是一个关于任意整数逆序的C语言代码 #include<stdio.h> int main(){int x,digit,ret;printf("请任意输入一个整数\n" ...

  8. c语言中不能编译,为什么`int;`可以在C语言中很好地编译,而在C ++中却不能?

    考虑以下程序(请参见此处的现场演示). #include int main(void) { int ;  // Missing variable name puts("Surprise&qu ...

  9. C语言学习(八)整数(int、short、long)的具体介绍、不同进制表示、输出,sizeof、unsinged的使用

    整数(int.short.long)的具体介绍.不同进制表示.输出,sizeof.unsinged的使用 int.short.long的用法及区别.为什么要用short.long? 在现代操作系统中, ...

最新文章

  1. VS Code关联vivado并安装Verilog插件
  2. Spring Cloud云服务架构 - common-service 项目构建过程
  3. DPKG命令与软件安装、APT
  4. 踩坑记(1)——使用slf4j+logback记录日志
  5. extjs combobox分页加载数据不显示
  6. 向左还是往右?Chris Dixon谈何时放弃你的idea
  7. 常见计算机密码破解实用手册
  8. 4*4矩阵键盘c语言,经典4*4矩阵键盘C51程序
  9. 【NanoPi2试用体验】nanopi2下的二维码识别
  10. 在线制作ICO网站图标网站
  11. javaScript 对象大全 (javascript code al 2)(转转)
  12. MATLAB三维画图函数使用总结
  13. 数仓4.0(三)------数据仓库系统(续)
  14. 华为harmonyos 2.0测评,华为鸿蒙HarmonyOS 2.0第二轮测试推送-OS2.0测试版新增机型汇总 - 非凡软件站...
  15. 浙江省高校计算机等级考试二级Python 程序设计题0|2023备考
  16. RL论文阅读20 - MF类算法总结(VPG, TROP, PPO, DDPG, TD3, SAC)
  17. 我的世界java村民繁殖条件,我的世界村民无限繁殖教程 教你村民怎么生孩子
  18. 同一wifi下小米电视无法投屏
  19. 怎么设置ie10默认浏览模式为兼容模式
  20. mysql锁级别_MySql三种级别锁的介绍及解锁命令

热门文章

  1. 手写遮罩层,禁止底层div滚动
  2. Python 直接读写硬盘扇区数据
  3. 将从数据库取到图片的url 在前台循环遍历显示图片
  4. Google C++编程规范
  5. 面试题:电梯/雨伞/杯子/笔/A4纸/纸杯… 怎么测试?
  6. 《MATLAB智能算法30个案例》:第29章 支持向量机的回归拟合——混凝土抗压强度预测
  7. 微信小程序服药提醒_您将不会再忘记服药:每日电话提醒
  8. maya对象属性_超详细!maya软件渲染属性设置说明(一)
  9. 2023全新UI商业版ChatGPT网页版源码V4.7.7+支持Ai绘画
  10. 电脑IPv4和物理地址(MAC)随机变化的解决方式(固定MAC地址)