趣味C语言小白速通—数据类型

目录

前言

数制

什么是进制?

二进制

二进制的运算规则

二进制转换为十进制

八进制和十六进制

数制间的转换

整型

        1.取值范围

        2.有符号整型和无符号整型

        3.类型间转换

字符型

浮点型

类型转换

        隐形转换

        显性转换


前言

        本文针对C语言小白速通,不进行详细的C语言原理讲解,主打一个实用,高速,如有问题可在评论区评论,后续会出精讲版,敬请期待!

数制

        仙友们,咱又来了!在座各位都是练气五层及以上的仙友了,接下来开始介绍以下各类空间戒指的种类了(数据类型)。学习变量的时候提到过,变量的空间大小依据其数据的类型。类似于各位仙友空间戒指的空间的大小也依据其空间戒指的种类。在学习数据类型的时候,我们需要知道计算机是如何存储和识别数的!

        计算机的所有数据都是以二进制的形式表示与存储的,但为了提高其可读性,学习过程中可能会用八进制或十六进制表示,但其原理都是大同小异的。

什么是进制?

        进制是一种计数方式,包括固定的符号集和统一的规则。一般进制规则就是满n进1,而n表示固定符号集的个数,n=2时就是二进制,n=10就是十进制。常见进制的符号集有:

按照常用性排序

  • 十进制  0 1 2 3 4 5 6 7 8 9
  •  二进制 0 1
  • 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 
  • 八进制 0 1 2 3 4 5 6 7

        以十进制为例,十进制存在10个固定符号0-9,当数值大于9则进1变10;类似的二进制有两个固定符号 0和1,当数值大于1时进1变10,二进制的10表示的就是十进制中的2。 

二进制

        当前计算器均采用二进制的方式进行数据存储和运算,其机制就是逢2进1。

二进制的运算规则

加法:0+0=0 1+0=1 0+1=1 1+1 =10

减法:0-0 =0 1-0 =1 1-1 =0 10-1=1

乘法:0 * 0=0 1*0=0 0*1=0  1*1= 1

除法:0/1=0 1/1=1

例如,二进制加法 1100+0111,计算如下

二进制转换为十进制

        很简单,以小数点为界,左边是整数部分,右边是小数部分。直接套公式吧:

\sum_{i=0}^{k}n_{i}\cdot 2^{i}

k是二进制数最高位数索引;i是权重每一位的权重是根据其位置决定的,小数点左边第一个i为0,往左一位i+1,往右一位i-1 ,依此类推;n则为每位上的系数0/1。

直接上示例

二进制 1101

十进制 1\cdot2^{3}+1\cdot2^{2}+0\cdot 2^{1}+1\cdot 2^{0}= 8+4+1=13

二进制 1000.01

十进制 1\cdot 2^{3}+0\cdot 2^{2}+0\cdot 2^{1}+0\cdot 2^{0}+0\cdot 2^{-1}+1\cdot 2^{-2}=8+0+0+0+0+0.25=8.25

八进制和十六进制

        八进制和十六进制的转换原理相同,就是符号集不一样,八进制只有0~7八个符号集,十六进制有0~9和A~F一共十六个符号集,A等于十进制的10,F等于十进制的15。转换机制和二进制一样,就是将公式最后的基数2改成8或者16

数制间的转换

        使用标准输出函数printf()可以直接进行进制转换输出,但此时需要格式控制参数,具体如下:

格式控制参数描述

%d

十进制有符号整型
%u十进制无符号整型
%f十进制浮点数
%o八进制数
%x十六进制数
整型

        就是整数,没有小数点的整数,5.0不算,5这种才是,根据其空间大小不一样和是否有正负号可分为七类

  1. 字符型  char
  2. 短整型  short int
  3. 整型  int
  4. 长整型  long int
  5. 无符号短整型 unsigned short
  6. 无符号整型  unsigned int
  7. 无符号长整型 unsigned long

 无符号表示只有正数没有负数

        1.取值范围

                根据不同数据类型其存储空间和格式不一样,取值范围会不一样。空间大小的分配看编译环境,既看你自己的编程软件,在32位或者64位的操作系统中一般空间分配大致为:

类型说明字节范围
字符型char10~255
短整型short2-32768~32768
整型int4-2147483648~+2147483648
长整型long4-2147483648~+2147483648
无符号短整型unsigned short20~65535
无符号整型unsigned int40~4294967295
无符号长整型unsigend long40~4294967295
        2.有符号整型和无符号整型

                有符号的数据类型因为需要表示正负,正负表示会占一位空间。下面以一个字节八位举例

10的二进制表示00001010
-10的二进制表示10001010

        有符号类型的第一位是符号位,0表示是正数,1表示是负数,因此一个字节只剩下7位去存储数据。对于无符号整数,一个字节八位都会用来存储数据

        3.类型间转换

        不同类型的整型数据占据的空间大小不一样,表示的范围大小也不一样,在类型转换时需注意切勿将过大的数据放进小的数据中,否则空间会爆满,会溢出,会混乱。例如

unsigned a=256;
char b=a;
printf("%d",b);

此时你获得的输出是 0 而不是256,原因是256超过了char的数据范围0 ~ 255,数据溢出了,从数据空间来看是出现了截断:

a0000000100000000
b00000000

 b就一个字节,a两个字节,在赋值过程中,a的高八位丢失,被截断。

字符型

        字符型的整型数据的其中一种,不同的是其他整型数据表示的都是一个整数,但字符型表示的是一个ASCII字符(美国信息交换标准代码),但其实际都是存储的一个数,只不过在展示的时候,将这个数按照ASCII表转换成了字符。例如字符A的ASCII码是65,其在计算机中存储的是65这数字的二进制码0100 0001,但其表示的意思不是65,而是ASCII表中65对应的字符A。ASCII的详细内容此处不作赘述。

浮点型

        浮点型可以表示有小数部分的数据,根据其存储空间不同和精度不同,可分为三类

  1. 单精度浮点型  float
  2. 双精度浮点型 double
  3. 长双精度浮点型 long double

 具体如表所示

类型位数有效数字取值范围
float326~7-1.4e-45~3.4e38
double6415~16-4.9e-324~1.8e308
long double12818~19
类型转换
        隐形转换

        在不同数据就行运算时,C语言偷偷的将数据类型进行了转换,从而达到统一,其转换顺序如图:

比如,当char和int一同运算时,C语言会偷偷将char转换为int进行运算;再比如当int和long和double一起运算时,会将int和long转换为double然后再运算。

        显性转换

        当多种数据类型进行运算时,当你明确的知道自己想要用哪种数据类型时,可以强制数据类型转换,也称显性转换。

格式如下:

(数据类型)变量或常量
(数据类型)表达式

例如:

int a=3;
float b=3.14;
float c;
(int) c=a+b;

这里就强制将 b和c转换成了int型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值