C——基本数据类型

1.变量与常量

常量:这些数据类型在使用前就设定好了,在整个程序运行中没有变化。

变量:这些数据类型在程序运行期间可能会改变或被赋值。

2.数据类型两大类:整数类型、浮点数类型

常量有其本身的性质:或是整数,或是小数、字符。变量还未被赋值时也不是什么都可以装,因为变量在使用之前是要被声明的,在这里就会让编译器知道这个变量在未来会被赋予怎样的值。

像这种储存的数值有他们的名称:整型、浮点型、字符型。

2.1浮点数

计算机储存的都是数字0或1,没有其他的表示,那么计算机是怎样储存浮点数的呢?

计算机把浮点数分成小数部分和指数部分来表示,而且分开储存这两部分。所以7和7.0的储存方式就不同。具体方式看第6条。

2.2int整数类型

普通情况下,int型是有符号整型,即正整数、负整数、0。其取值范围依计算机系统而异,一般而言,储存一个int型要占用一个机器字长:我们平时称的32位、64位计算机等。

我们都知道用printf()打印int型数字时,要用%d,其实%d只是打印十进制数字才用的,当需要打印八进制或者十六进制时,要分别使用%o与%x。另外,要显示八进制前缀0、十六进制前缀0x,要在转换说明(%d等)中加入'#'。

整型与浮点型的区别:

1.在C语言中,整数就是没有小数部分的数,浮点数就是有小数部分的数。这个定义看似简单,却常常引起一些错误,比如:7.0,我们在数学中或许会直接将它的小数部分省去,从而是她变成一个整数。但是计算机却不会这种省略,它会简简单单的认为它是有小数部分的,所以7.0在C语言中,被称为浮点数。

2.浮点数可以表示的范围更大

3.对于一些算数运算(例如很大的数相加减),浮点数损失的精度更多。?

(1)这是因为任何区间内存在无穷多个实数,浮点数只是一个近似值。

(2)计算机以二进制形式储存数字,但小数化成二进制时可能会很长,造成位数不构截断部分位数,所以数字本身就造成了误差。

4.浮点运算比整数运算慢,即使现在CPU含有浮点处理器,这个速度差也只是减小了而已。

 

2.3整数类型分支

int类型的分支short int、long int、long long int、unsigned int、unsigned long int等。

其中,short、int、long、long long等所占的存储空间在同一字长的约束下越来越大。因为他们所占的存储空间都与机器字长有关,(以当下64位计算机而言)long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。

所以根据上点,为了优化系统内存,尽量使用占用单位较小的数据类型。

我们在使用数字时,要想把一个较小的数作为long型对待,就要在值的末尾加上l(小写L)或L(虽然不知道谁闲的没事干要这样对待一个数字)。

打印他们时,自然也不能再用%d了,打印unsigned int型时用%u,long用%ld,类似的,long long用%lld,short型用%hd,%lu表示unsigned long··· ···

在不同的类型之间转换时,要注意溢出,将发生数值的改变(具体改变见后续说明)。

3.char类型:最小的整数类型

char类型用于储存字符,但从技术层面来看是整数类型,因为char实际上存储的是整数而不是字符。编译器一旦发现用''括起来的内容便自行将其转换成相应的代码值。

?在打印字符时,会发现有些ASCII码所表示的东西你自己表示不出来,例如一些代表行为的字符如换行之类,这里有三种方法表示(输出)这些字符。

(1)利用ASCII码

(2)利用转义字符:/的形式。是使用特殊的符号序列表示一些特殊字符。如下图:

其中的当前位置就是光标所在的位置。中下方的一些行数中说代表了某些字符,为什么不在printf时直接放到""中呢?因为这些字符用于定义字符常量,是printf的一部分,直接使用会造成混乱。

4.bool类型:另类的整数类型

用于表示布尔值,即逻辑值:true和false。C语言用值1表示true,用0表示false,所以bool实际上也是一种整数类型,但原则上只占有1位存储空间。

5.可移植类型:stdin.h和inttypes.h

啥玩意看不懂啊呜呜呜呜呜呜想哭··· ···

第一个好像是int和计算机位数组合的长成int32_t作为int的别名。然后用这个头文件会把int或long替换成与系统相匹配的类型。别名精确宽度整数类型。

不支持的时候可以用第二个头文件。这一类类型名的类型一定是至少有指定宽度的最小整数类型。这种类型的集合被称为最小宽度类型。

··· ···真的不太懂,进行下一项把。看到这的抱歉了呜呜呜

6.浮点类型

C语言中浮点类型有float、double、long double类型。

这里我们就不得不提浮点数的指数记法,比如5.23e+8,表示5.23*10^8,e后面是10的指数。其中,正号可以省略,可以没有小数点或指数部分,但不能同时省略两者;可以省略小数部分或整数部分,但不能同时省略两者。数字和e(可以是E)之间不要有空格哦。

float类型必须至少能表示6位有效数字(也就是说,可以有七位小数啦但是不能精确的表示了哦),且取值范围至少是10^-37~10^37。通常系统储存一个浮点数要占用32位,8位用于表示指数的值和符号,剩下的24位用于表示非指数部分。

另一种浮点类型是double(双精度),与float的最小取值范围相同,但至少能表示10位有效数字。一般情况下,double占用64位而不是32位。一些系统将多出来的32位全部用于表示非指数部分,这不仅增加了有效数字的位数,还减小了舍入误差。

通常情况下,计算机内部存储小数都是以double存储的,所以假定a为float时,进行a=4.0*2.0,那么乘积将被截断成float的宽度。这样做计算精度高,但会减慢运行速度。?

以上是特别常见的数据类型,不常见的请详见下一份博客哦~

注意:把一个变量初始化成不同类型的变量时,编译器会把值转换成与变量匹配的类型(直接截断),导致部分数据丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值