小朋友学C语言(44):基本数据类型的大小和取值范围
一、单字节能表示的范围
(一)无符号单字节
一个字节有8位,取值范围为00000000~11111111,化为十进制即为0~255。所以无符号的一个字节可以表示的数字范围为0~255,共256个数。
(二)有符号单字节
若有符号,则最高位表示符号位,0表示正号,1表示负号。能表示的正数的最大值为01111111,即十进制的127。能表示的负数的最小值不是11111111,而是10000000。10000000是个特殊的数字,1既表示负号,也参与了运算,化为十进制则为-27 = 128。而11111111则是第二小的数,化为十进制则为-127。 所以有符号的一个字节可表示的数字范围为-128 ~ 127,共256个数。 一个字节 = bit。
二、布尔类型
可以使用sizeof运算符求出基本数据类型的大小。
例1
#include <stdio.h>
int main()
{
printf("%dn", sizeof(bool));
return 0;
}
运行结果:
1
分析: 这里可以看出,每个bool变量占一个字节。因为bool只有两个值,true和false,即1和0。所以用一个bit位就足够表示了。这里用一个字节实际上是浪费了内存。但是因为计算机存储数据的基本单位是Byte,不是bit。所以也没什么办法。 sizeof不是一个函数,而是一个运算符。作用是计算所占内存大小。
三、字符型
考虑到A-Z的ASCII码为65-90,a-z的ASCII码为97-122。这两段的数据范围,用一个字节就可以表示。所以每个字符占用一个字节。下面用程序验证一下:
例2
#include <stdio.h>
int main()
{
printf("%dn", sizeof(char));
return 0;
}
运行结果:
1
四、整型
C和C++中,整型有四种:int、unsigned int、long long、unsigned long long。 unsigend int和int都占4个字节的内存,区别在于,int带符号的,最高位用来表示符号,0为正1为负;unsigned int不带符号,最高位不表示符号,而是参与运算表示数字。unsigned int可以简写为unsigned。 int的最大值是01111111,11111111,11111111,11111111,即十进制的231 – 1 = 2 147 483 647。最小值是10000000,00000000,00000000,00000000,00000000,即十进制的-231 = -2 147 483 648。所以int的数据表示范围大概在-21亿到21亿之间。 unsigned int的最大值是11111111,11111111,11111111,11111111,最小值是00000000,00000000,00000000,00000000,00000000,即十进制的0 ~ 4 294 967 295。
short int和unsigned short int都占2个字节的内存,区别在于,short int带符号的,最高位用来表示符号,0为正1为负;unsigned short int不带符号,最高位不表示符号,而是参与运算表示数字。 short int能表示的数据范围为-215 ~ 215 – 1,即-32768 ~ 32767。 unsigned short int能表示的数据范围为0 ~ 216 – 1,即0 ~ 65535。
unsigend long long和long long都占8个字节的内存,区别在于,long long带符号的,最高位用来表示符号,0为正1为负;unsigend long long不带符号,最高位不表示符号,而是参与运算表示数字。 long long能表示的数据范围为-263 ~ 263 – 1。 unsigned long long能表示的数据范围为0 ~ 264 – 1。
例3
#include <stdio.h>
#include <limits.h>
int main()
{
printf("%dn", sizeof(int));
printf("%dn", sizeof(unsigned int));
printf("%dn", sizeof(short));
printf("%dn", sizeof(unsigned short));
printf("%dn", sizeof(long long));
printf("%dn", sizeof(unsigned long long));
printf("%dn", INT_MAX);
printf("%dn", INT_MIN);
return 0;
}
运行结果:
4
4
2
2
8
8
2147483647
-2147483648
五、浮点型
float类型占4个字节,double类型占8个字节。
例4
#include <stdio.h>
int main()
{
printf("%dn", sizeof(float));
printf("%dn", sizeof(double));
return 0;
}
运行结果:
4
8
float能表示的整数范围约为-3.4 * 1038 ~ 3.4 * 1038,精度即有效数字为7位。 double能表示的整数范围约为-1.79 * 10308 ~ 1.79 * 10308,精度即有效数字为15位。 虽然float和double能表示的整数范围比int和long long能表示的整数范围大的多,但因为浮点数无法精确表示,所以要表示整数(精确值)时,只能用整型变量来表示,不能使用浮点型变量来表示。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用minikube安装kubernetes和dashboard
- FFmpeg + OpenGLES 实现视频解码播放和视频滤镜
- 行为型设计模式:模板模式
- 容器中的隔离与限制:namespace和cgroups
- 行为型设计模式:策略模式
- redis实战第十二篇 redis cluster请求重定向
- 行为型设计模式:责任链模式以及mybatis中的责任链
- java中BigDecimal使用和注意事项
- redis实战第十一篇 redis cluster添加密码
- Linux下docker制作springboot应用镜像
- 行为型设计模式:备忘录模式
- 行为型设计模式:访问者模式
- redis实战第十篇 集群收缩
- redis实战第九篇 集群扩容自动迁移槽(redis-cli)
- 自动化运维| Ansible playbook的逻辑控制语句