C语言的数据类型——整数类型和浮点类型

??基本数据类型分为整数类型浮点类型两大类。其中,整数类型又可以被细分成有符号整型无符号整型

1.整数类型

有符号整型

  • short int
  • int
  • long int
  • long long int
  • char(使用整数存储字符)

无符号整型

  • unsigned short int
  • unsigned int
  • unsigned long int
  • unsigned long long int
  • unsigned char(使用整数存储字符)

??其中,后面的类型不能小于前面的类型,即short int占用的空间可能等于int但不会大于它,或者long int可能等于或大于int占用的空间。举个例子,16位机下,intshort int占16位,long int占32位,而在32位机中int也变成了32位,具体见下表。

整型 16位编译器 32位编译器 64位编译器
char 1 1 1
short int 16 16 16
int 16 32 32
long int 32 32 64
long long int 32 64 64


32/64位编译器下各种整型的取值范围:

| ------ | :------: | :------: |
| 整型 | 十进制范围 | 对应二进制 |
| short int | [-32767, 32767] | 1/0 15个1 |
| int | [-2147483647, 2147483647] | 1/0 31个1 ||
| long int 32| [-2147483647, 2147483647] | 1/0 31个1|
| long int 64| [-9223372036854775807, 9223372036854775807] |1/0 63个1|
| long long int | [-9223372036854775807, 9223372036854775807] |1/0 63个1|
| unsigned short int | [0, 65535] |1/0 16个1|
| unsigned int | [0, 4294967295] |1/0 32个1|
| unsigned long int 32 | [0, 4294967295] |1/0 32个1|
| unsigned long int 64 | [0, 18446744073709551615] |1/0 64个1|
| unsigned long long int | [0, 18446744073709551615] |1/0 64个1|



??因此,类型使用顺序是short-unsigned short-int-unsigned int以此类推。需要注意的是,对于longint大的系统,应尽量使用int以减少运行负担(现如今主要是32/64位)。而对于longint相同的系统,应使用long类型以保证向下支持。

2.浮点类型

??浮点类型使用一种类似于科学计数法的方式,去表示包括小数在内更大范围的数据,可以分为floatdoublelong double,IEEE浮点标准用一种特殊的计数法去表示一个数n:

n = (-1)^{s} × m × 2^{e}
  • s即sign,为了表示该数的正负而引入,当s = 1时为负数,0位非负数
  • e为比例因子的指数,称为浮点数的指数
e = | E | - Bias
  • E表示阶码,为二进制,| E |表示二进制数对应的十进制数,Bias为偏置数
m = | 1.M |
  • M是一个二进制小数,规定尾数第二位加小数点为m,取值范围是[1, 2)或[0, 1)

??以单精度float为例,该类型占用32位空间,其中第32位(N31)为符号位,N30-N23位为8位指数位,N22-N0位为23位的尾数位。

举个例子,存在一个浮点数float n = 15213.0
转化为二进制N = 11101101101101 = 1.1101101101101 × 2^13(小数点左移13位)
则1.M = 1.1101101101101
frac = 11011011011010000000000
e = 13

又因为Bias = 127
所以| E | = 140
E = 10001100

因此浮点表示法:
0 10001100 1011011011010000000000
??那么,如何求解浮点类型的取值范围?同样以32位的float为例,根据上面已经可以推出:

n = (-1)^{s} × m × 2^{| E | - 127}

??满足以下条件时数值最大

  • E = 11111110即| E | = 254
  • 1.M = 1.11111111111111111111111(1.23个1)即m = 2-2^(-23)
    因此n最大数值为[2-2^(-23)]×2^127 = 3.4028×10^38

??满足以下条件时数值最小

  • E = 00000001即| E | = 1
  • 1.M = 1.00000000000000000000001即m = 1+2^(-23)
    因此n最小数值为[1+2^(-23)]×2^(-126) = 1.1755×10^(-38)

??因此求出浮点类型的取值范围:

| ------ | :------: | :------: |
| 浮点型 | ??位数?? | 取值范围 |
| float | 32| [-3.4028×10^38,-1.1755×10^(-38)] ∪ [1.1755×10^(-38),3.4028×10^38] |
| double | 64 | [-1.7977×10^308,-2.2250×10^(-308)] ∪ [2.2250×10^(-308),1.7977×10^308] |

*进一步了解IEEE 754可查阅CSAPP第二章或查阅此文档

原文地址:https://www.cnblogs.com/alamcat/p/12161935.html

时间: 2024-10-10 01:54:19

C语言的数据类型——整数类型和浮点类型的相关文章

网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

C语言程序设计进阶_第一周:数据类型:整数类型.浮点类型.枚举类型 1.0数据类型 1.1整数类型 1.2浮点类型 1.3逻辑类型 1.4类型转换和条件运算 1.0数据类型 1 整数 char(%c), short, int(%d), long(%ld), long long(C99) 2 浮点数 float(%f), double(%lf), long double(C99) 3 逻辑 bool(C99) 4 指针 5 自定义类型 所表达的数的范围:char<short<int<flo

[C语言]进阶|数据类型: 整数, 浮点, 逻辑, 类型转换和条件运算

--------------------------------------------------------------------------------- [C语言的类型] 整数: char, short, int, long, long long 浮点数: float,double,long double 逻辑: bool 指针 自定义类型 [类型有什么不同] 类型名称:int,long,double 输入输出时的格式化:%d,%ld,%lf 所表达的数的范围:char < short

c语言的数据类型,运算符,存储类型

[1词法符号]1. 关键字:32个1) 存储类型:决定(设备)变量的存储位置auto(自动型).extern(外部引用) static(静态型) register(寄存器类型)2) 数据类型:决定设备在对应位置所占的空间大小char (字符型) int(整型) short(短整型) long(长整型) float(单精度浮点类型) double(双精度浮点类型) signed(有符号)unsigned(无符号)3)控制语句:if ,else ,switch , case ,break ,defa

Swift学习笔记_数据类型_浮点类型

浮点类型 是有小数部分的数字.表示的范围比整数类型更大,可存储比Int类型更大或更小的数字. 提供了3种表示形式: (1)Float 表示32位浮点数,可精确到小数点后6位. (2)Double 表示64位浮点数,可精确到小数点后15位. (3)Float80 表示80位浮点数,可精确到小数点后17位. ※Float32和Float64分别是Float和Double的类型别名 var floatv:Float = 0.12345678912345  //0.1234568 var floatv2

C语言的数据类型的本质和提高学习

一.数据类型的概念 类型是对数据的抽象 类型是相同的数据有相同的表示形式.存储格式以及相关的操作 程序中使用的数据必定属于某一种数据类型 ? 1.算术类型: 包括三种类型:整数类型.浮点类型,枚举型. 其中: 枚举类型:被用来定义在程序中只能赋予其一定的离散整数值的变量. 字符型char:也是整数型,所有的字符都用ASCII码表来表示. 2.void 类型: 类型说明符 void 表明没有可用的值. 3.构造类型: 包括:指针类型.数组类型.结构类型.共用体类型和函数类型(函数是一个特殊的数据类

MySQL 浮点数类型和定点数类型

MySQL 中使用浮点数和 定点数来表示小数,浮点数包括单精度浮点类型(FLOAT)和双精度浮点类型(DOUBLE),定点数只有DECIMAL一种类型.浮点类型和定点类型都可以用 (M, N) 来表示,其中 M 为精度,表示总共的位数:N 为标度,表示小数的位数. (1) 浮点数与定点数:浮点数指小数点在小数中的位置是不固定的,定点数指小数点在小数中的位置是固定的(2) 单精度与双精度:单精度用 4 个字节来存储的,双精度用 8 个字节来存储,由于存储位不同,他们能表示的数值的范围就不同,也就是

C语言-浮点类型

C语言-浮点类型 浮点类型 在0的两侧有一小块区域,这个区域非常接近0,但是不等于0,是float(表达范围数量级10^-38^)或者double(达范围数量级10^-308^)无法表达的,而0是可以表达的:nan:不是一个有效的数字.有效数字:在有效数字范围是精确的,超出这个范围是不准确的. %e:输出科学计数法的形式,%E只是表示时字母大写. 在使用科学计数法时,数字与E或者e之间不要有任何空格.小数点位数较多时,double有时显示不出来小数位的数字如1E-10,以double输出时只是0

两大基本数据类型 - 整数类型 / 浮点数类型

一.整数与浮点数之间的区别 两者的存储方式不一样,整数是直接以二进制形式进行存储,对于浮点数,需要将小数部分和指数部分分开存储.两者之间的区别还有如下: 1-整数没有小数部分,浮点数有小数部分: 2-浮点数可以表示的范围比整数大: 3-对于一些算术运算(两个很大的数相减),浮点数损失的精度更多: 4-在任何区间内都存在着无数个实数,所以计算机的浮点数不能表示区间内的所有值,通常只是实际值的近似值: 5-过去,浮点运算比整数运算慢,不过,有了浮点处理器,速度上的差距有了一定的缩小. 二.整数 in

MySQL数据类型--------浮点类型实战

1. 背景 * MySQL支持的浮点类型中有单精度类型(float), 双精度类型(double),和高精度类型(decimal),在数字货币类型中推荐使用高精度类型(decimal)来进行应用. * MySQL浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001.FLOAT和DOUBLE在不指