栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】常用类型与数据存储基础知识

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】常用类型与数据存储基础知识

前言
本文将会对C语言中的基本类型相关知识进行介绍,并且对于整型在内存的存储规则进行详细介绍。
本文章将参考书籍《C Primer Plus (第六版)》来阐述基本概念知识。`
一、数据类型

1、变量与常量数据

有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)。
另一些数据类型在程序运行期间可能会被改变或者赋值,这些称为变量(variable)。

#include 
#define constant 5
//这里的constant是一个常量,被定义成 5
int main()
{
	int variable = 3;
	//这里的varialbe是一个变量,他的值为3
	printf("constant:%dnvariable:%dn", constant, variable);
	return 0;
}

当我们尝试改变他们的值的时候就会发现

constant = 3; //改变一个常量的值是不合法的
variable = 5; //变量的值是可以改变的

2、使用const修饰变量

const int variable = 3;//定义名为variable的变量
variable = 5;//这里的variable被const修饰后具有不可修改的特性(该特性可突破)

3、数据类型关键字

不仅变量和常量不同,不同的数据类型之间也有差异(使用的内存空间大小与存取规则差异)。一些数据类型表示数字,一些数据类型表示字母(字符).C通过识别一些基本的数据类型来区别和使用这些不同的数据类型。

整型家族:

char: 字符数据类型
unsigned char - 无符号
signed char - 有符号

short: 短整型
unsigned short - 无符号短整型
signed short - 有符号短整型

int :整型
unsigned int - 无符号标准整型
signed int - 有符号标准整型

long:长整型
unsigned long - 无符号长整型
signed long - 有符号长整型

上述的整型中short、longunsigned属于附属关键字修饰基本整数类型,其特征如下:

short int 类型(short 类型)占用的空间可能比int 类型少常用于较小数值的场合以节省空间。

long int类型(int类型)占用的存储空间可能比int多,适用于较大数值的场合。

(C99标准加入)long long int(long long)占用的存储空间可能比 long 多,适用于更大数值的场合。该类型至少占 64 位。

unsigned int(unsigned)只用于非负值的场合。这种类型是无符号数,它与有符号类型表示的范围不同。例如,16位unsigned int 允许的取值范围是 0 ~ 65535,而不是*-32768 ~ 32767*。用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数。

浮点型家族:

float:单精度浮点数
double:双精度浮点数

各类整数类型对大多数软件开发项目而言够用了
_Bool类型:

C99标准添加了_Bool类型,用于表示布尔值,即逻辑值true和false,所以_Bool类实际上也是一种整数类型。但原则上它仅占用1位存储空间,因为对0和1而言,1位的存储空间足够了。

二、数据的存储

1.原码、反码、补码

计算机中的有符号数有三种表示方法,即原码、反码和补码。
三种表示方式均有符号位和数值位两部分,符号位都是用0表示’正’,用1表示’负‘,而数值位三种表示方法各不相同。
原码
直接将二进制按照正负数的形式翻译成二进制,就是原码。
反码
将原码的符号位不变,其他位依次按位取反,就是反码。
补码
反码+1就得到补码。

2.整型在数据中的存储

以整型int为例子:

int a = 20;
int b = -10;

上图中可以看出:
变量a的值被定义成 20 在内存中为 14 00 00 00
变量b的值被定义成 -10 在内存中为 f6 ff ff ff
我们可以看出 14 00 00 00 是十进制数字20的十六进制,但是-10在内存中的存储方式和正整数存储的方式明显不同.

无符号整型和有符号整型的存储规则

当有符号(无符号)整型的符号位为0时,也就是说当变量是正整数的时候,他的原码 == 反码 == 补码。
当有符号整型的符号位为1时,就需要遵循计算规则进行转换。

为什么使用补码

我们通过一个简单的例子来初步了解一下:
1 + -1 = ? 方便计算我们用 内存大小8bit的char型来表述
1 :原码 = 反码 = 补码 = 0000 0001
-1:原码 = 1000 0001
:反码 = 1111 1110
:补码 = 1111 1111
*数据的计算是补码在cpu中进行的计算操作
:: 0000 0001
’+ ‘ : 1111 1111
‘=’ 1 0000 0000
这里数据发升了进位最高位的 1 被舍弃,所以结果的补码为:0000 0000

从这个例子中看出使用补码方便了计算,同时也将全0数据段定位成了’0‘

大小端概念

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

浮点型数据的存储
常见的浮点数:

3.14159 1E10 浮点数家族包括: float、double、long double 类型。

存储规则:

根据国际标准IEEE(电子和电气工程协会)745,任意一个二进制浮点数V可以表示成下面的形式:
·(-1)^S * M * 2^E
·(-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数
·M表示有效数字,大于等于1,小于2
·2^E表示指数位

举例来说:

十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么,按照上面V的格式,可以得出s=0, M=1.01,E=2。

十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么,s=1,M=1.01,E=2。 IEEE 754规定:
对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号