C语言中的整数(short,int,long)

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

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

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

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

让整数占用更少的内存可以在 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;

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

总结起来,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位环境下,不同的操作系统会有不同的结果,如下所示(长度以字节计):

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

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

#includeint main(){short a = 10;int b = 100;long c = 1000;char d = 'X';int a_length = sizeof a;int b_length = sizeof(int);printf("a=%d, b=%d, c=%d, d=%d

", a_length, b_length, sizeof(c), sizeof(char));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 = 0177777; //十进制为 65535//非法的八进制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; //十进制为 65535//非法的十六进制int m = 5A; //无前缀 0Xint n = 0X3H; //H不是有效数字

3) 十进制

十进制由 0~9 十个数字组成,没有任何前缀,和我们平时的书写格式一样,不再赘述。

注意:C语言中只能使用八进制、十进制和十六进制,不能直接使用二进制,它没有特定的前缀。

各种整数的输出

在使用 printf 输出整数时,不同的控制字符会有不同的输出格式。

1) 输出 int 使用%d,输出 short 使用%hd,输出 long 使用%ld。请看下面的例子:

#includeint 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=65535

2) 输出十进制使用%d,输出八进制使用%o(注意是字母 o,不是数字 0),输出十六进制使用%x或%X。如果希望带上前缀,可以加#,例如 %#d、%#o、%#x、%#X。请看下面的例子:

#include#includeint main(){int a = 100, b = 0270, c = 0X2F;printf("a(d)=%d, d(#d)=%#d

", a, a);printf("a(o)=%o, d(#o)=%#o

", b, b);printf("c(x)=%x, c(#x)=%#x, c(X)=%X, c(#X)=%#X

", c, c, c, c);system("pause");return 0;}

运行结果:

a(d)=100, d(#d)=100

a(o)=270, d(#o)=0270

c(x)=2f, c(#x)=0x2f, c(X)=2F, c(#X)=0X2F

需要注意的是,十进制数没有前缀,所以 %d 和 %#d 的输出结果一样。

c语言中短整形字节,C语言中的整数(short,int,long)相关推荐

  1. c语言中短整形字节,C语言中各种整型类型所占字节数

    平台:64位编译器+LINUX+Gcc #include main() { char a; char* b; short int c; int d; unsigned int e; float f; ...

  2. python语言的取余运算符_Python 中用于整数除法取余的运算符是()_学小易找答案...

    [填空题]隐球菌病多由()传播. [单选题]下列选项中,哪一个符号是管道符号. ( ) [多选题]可采用分批法计算产品成本的企业有( ) [填空题]现有字符串 s="1234567" ...

  3. 字节转换比特位c语言,C语言实现双字节在数组中按比特位移动

    先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮.为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃.就应用到该思想. 双字节是1 ...

  4. c语言指针变量字节,C语言指针变量类型和大小

    指针变量作为C语言中的特殊数据类型,除了用于存储内存地址之外,它与其他类型比较是否具有其他特点呢?接下来对指针类型进行分析,剖析指针类型的特点. 指针的大小与其指向的内存中存储的变量类型无关,它只与计 ...

  5. c语言里10h代表什么,汇编中的10H中断int 10h详细说明

    汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...

  6. c语言64位long多少字节,64位操作系统下,关于int和long占用字节数同为4问题

    一.c语言数据占用字节 32位:char 1    short  2   int 4  long 4  long long 8 64位:char 1   short 2    int 4 long 8 ...

  7. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?

    已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少? 用共用体方法:共用体内的空间是公用的,每一个成员都可以访问共用 ...

  8. c语言中长整型的作用,C语言,整形和长整型都占四个字节?

    C语言中,整型常量和长整型常量,有什么区别? 整型常量和长整型常量(包括有符号的和无符号的),为什么占用字节数和一.指代不同 整型常量:是通常的整数,包括正整数.负整数和0,其数据类型显然是整型. 长 ...

  9. c语言浮点型与整形比较大小,C语言整形与浮点型转化过程中的精度损失

    本篇文章主要解决的问题是C语言整形与浮点型转化过程中的精度损失从而容易产生bug,对于浮点和整形的相关内容大家可以参考下面两篇文章.,这里就不再赘叙了. 1整形与浮点转化的精度损失参考小程序:1#in ...

最新文章

  1. 微信小程序如何搭建本地环境开发
  2. 百架无人机“失控撞楼”,程序员写的 Bug?
  3. SegmentFault 助力 Uber Hackathon
  4. php实现单个用户禁止重复登录,防止同一用户同时登陆
  5. 硬件能力与智能AI-Zoomla!逐浪CMS2 x3.9.2正式发布
  6. C++ 获取函数耗时
  7. 在windows命令行中查询MySQL乱码
  8. mysql使用二进制日志恢复数据
  9. RHEL7.X安装12.2RAC时root.sh错误CLSRSC-400的解决方案
  10. 北方交大的开源软件镜像站
  11. windows10使用mklink命令给C盘软件搬家
  12. CSA发布云控制矩阵3.0版
  13. 2012“第四届云计算中国峰会”倒计时
  14. 安装谷歌服务框架2022最新版本22.45.15失败
  15. 智慧点餐系统多方面优化餐厅运作效率
  16. 电动车锂电池行业前景广阔,啰马锂服帮助企业、门店“降本增效”
  17. 程序是怎样跑起来的-读书文摘
  18. HDU - 2034 人见人爱A-B 【set】
  19. 默克尔树_默克尔树:正在使用中
  20. 基于51单片机的积水监测系统设计

热门文章

  1. 我所理解的JVM(六):内存回收
  2. java计算机毕业设计网上租房管理源码+系统+数据库+lw文档+mybatis+运行部署
  3. cron和anacrontab
  4. C语言刷题随记 —— 求 s=a+aa+aaa+aaaa+aa...a 的值
  5. ROS下DWA配置和A*配置
  6. 浅谈大屏地图制图那点事儿
  7. i.MX6ULL驱动开发 | 30 - 使用EC20 4G网卡(移植移远GobiNet驱动)
  8. java设计模式 - 初学笔记 - 模板方法
  9. 模拟NOIP2018提高组(普及组)初赛总结(题目+易错点+解析)
  10. Flink Catalog介绍