小酌数据一口

简介: 数据类型

目录

数据类型

1.内置类型

整型家族

浮点型家族

2.构造类型

数组类型

结构体类型

枚举类型

联合类型

3.指针类型

int* 整型指针

float* 浮点型指针

char* 字符型指针

void* 空类型指针

4.空类型

void

数据存储

整形存储

char

int

short

浮点型存储

float



数据类型

1.内置类型

char 字符数据类型

short 短整型

int 整型

long 长整型

long long 更长的整型

float 单精度浮点型

double 双精度浮点型

整型家族

char

有符号还是无符号取决于编译器,大部分编译器下是signed char

unsigned char

signed char

short

unsigned short【int】

signed short【int】

int

unsigned int

signed int

long

unsigned long【int】

signed long【int】

浮点型家族

float

double


2.构造类型

数组类型

int a = 10 去掉名字就是类型所以a的类型就是int

int arr 【10】 = {0}去掉名字arr 所以这个数组类型是int 【10】数组类型是自定义的所以它也是构造类型

结构体类型

枚举类型

联合类型


3.指针类型

int* 整型指针

float* 浮点型指针

char* 字符型指针

void* 空类型指针


4.空类型

void

表示空类型 通常用在函数的返回值类型,函数的参数,指针类型


数据存储

整形存储

char

image.png

image.png

 #include<stdio.h>
 int main()
 {
     //char的范围-128~127
     char a = 128;
     //00000000000000000000000010000000原反补相同
     //10000000
     //11111111111111111111111110000000
     //4,294,967,168
     char b = -127;
     //10000000000000000000000001111111原
     //11111111111111111111111110000000反
     //11111111111111111111111110000001补
     //10000001
     //11111111111111111111111110000001
     //4,294,967,169
     printf("%u\n", a);
     printf("%u\n", b);
     return 0;
 }

打印无符号整形 %u

打印有符号整形 %d


int

整形最大值INT_MAX,最小值INT_MIN定义在limits.h头文件里面

 #include<stdio.h>
 int main()
 {
     int i = -20;
     //10000000 00000000 00000000 00010100
     //11111111 11111111 11111111 11101011
     //11111111 11111111 11111111 11101100    补码
     unsigned int j = 10;
     //00000000 00000000 00000000 00001010    原反补
     int a = 0;
     unsigned int b = 0;
     a = i + j;
     printf("%d\n", a);  
     //11111111 11111111 11111111 11101100
     //00000000 00000000 00000000 00001010
     //相加之后  
     //11111111 11111111 11111111 11110110
     //11111111 11111111 11111111 11110101
     //10000000 00000000 00000000 00001010   -10
     b = i + j;
     printf("%u\n",b);
     return 0;
 }

同样的数据存储,由于看待的视角不同,所以打印出来的结果就不同

image.png


short

image.png

image.png


浮点型存储

float

浮点型大小限制头文件在float.h头文件里面

image.png

 #include<stdio.h>
 int main()
 {
     int n = 9;
     float* pf = (float*)&n;//站在浮点型角度去访问这个空间,那为什么会不一样呢,说明浮点型数据存储方式和整形存储方式是不一样的
     printf("%d\n", n);
     printf("%f\n", *pf);
     *pf = 9.0;
     printf("%d\n", n);
     printf("%f\n", *pf);
     return 0;
 }


根据国际标准IEEE(电子和电子工程协会)754,任意一个二进制浮点数V可以表示成下面形式:

(-1)^S*M*2^E

(-1)^S表示符号位,当s=0,v为正数;当s=1,v为负数

M表示有效数字,大于等于1,小于2

2^E表示指数位

上面那个是什么鬼玩意是不是觉得懵逼了,下面我们举个例子

image.png

 

所以9.0的二进制表现形式可以表示为

    10010.0

    1.001*2^5

    因此(-1)^0*1.001*2^5

IEEE754规定:

对于32位的浮点数,最高位是符号位s,接着的8位是指数E,剩下的23位为有效数字M

image.png

对于64位的浮点数,最高的一位是符号位,接着的11位是指数位,剩下来的52位是有效数字M

image.png

IEEE 754对有效数字M和指数E,有一些特别规定

因为1<=M<2,也就是说,M可以写成1.xxxxx的形式,其中xxxxxx是小数部分

IEEE 754规定,在计算机内部保存M时默认这个数的第一位总是1,所以可以被省略,只保留后面的xxxxxx就好。比如1.01就保存01,等读到他的时候把1加上去就好,这样可以节省一位有效数字

至于E的话

E作为一个无符号整数(unsigned  int)8位范围0~255,11位范围0-2047,但实际上科学计数法中的E是可以位负数的,所以IEEE  754规定,存入内存时的E必须再加上一个中间数,8位就加127,11位就加1023,(什么意思呢  就是我们求的真实的E加上一个中间数再存到内存中)

image.png

这些仅仅是存进去的那我们是如何取出来的呢?

E在内存中有三种方式可以取出

E不全为0不全为1

这时浮点数就采用下面的规则,E的计算值减去127(或1023),得到真实值,再将有效数字M前面加上第一位1

E全为0

这时浮点数的指数E直接等于1-127(或1-1023)为真实值

有效数字M不再加上第一位的1,而是还原为0.xxxxxxxxx的小数,这样做是为了表示正负0,以及接近于0的很小数字

E全为1

如果有效数字M全为0,表示正负无穷大(正负取决于s)

所以那个题目就好解了

 #include<stdio.h>
 int main()
 {
     //float b = 1.5f;
     //(-1)^0*1.1*2^0
     //0+127
     //0 0111 1111 1000 0000........
     //整合一下0011 1111 1100 0000 .........
     //3f c0 00 00
     int n = 9;
     //00000000 00000000 00000000 00001001
     float* pf = (float*)&n;
     //换个视角看内存
     //他会认为E是全0 所以是无限小 所以打印出来的是0.000000
     printf("%d\n", n);
     printf("%f\n", *pf);
     *pf = 9.0;
     //1001.0
     //1.001*2^3
     //3+127 = 130
     //0 1000 0010 0010 000 ........
     //0100 0001 0001 0000 0000 0000 0000 0000
     //如果是整形视角的话就是1,091,567,616
     printf("%d\n", n);
     printf("%f\n", *pf);
     return 0;
 }

image.png

 


目录
相关文章
|
算法 Android开发 C++
LeetCode 周赛上分之旅 #49 再探内向基环树
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
98 1
|
8月前
|
运维 监控 数据安全/隐私保护
绝地反击,不做背锅侠!
那么作为运维人员,如何摆脱以上背黑锅的尴尬局面呢?堡垒机当然是破解此局面的绝杀大招。
67 0
|
存储 消息中间件 缓存
还在拧螺丝?是时候学习造航母了!
还在拧螺丝?是时候学习造航母了!
小猴打架
题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友。每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友。经过N-1次打架之后,整个森林的小猴都会成为好朋友。 现在的问题是,总共有多少种不同的打架过程。
149 0
小猴打架
|
安全 物联网 大数据
高考之后,切勿重蹈徐玉玉的悲剧
一年一度的高考日已结束,莘莘学子也将面临“高考后的综合选择症”,因为面临查成绩、填志愿、选大学。与此同时,也面临着各种信息来源,如亲朋好友的建议、莫名的电话短信、网上的信息等等;让我们分不清孰是孰非、真真假假。
1182 0
史蒂夫&#183;乔布斯成功的的七条秘诀
导语:《史蒂夫·乔布斯的创新秘诀》一书的作者为读者总结了苹果公司领袖史蒂夫·乔布斯成功的七个秘诀,供广大业界人士参阅。 在这辞旧迎新之际,企业的头头脑脑们都在寻找新的、创造性的途径来推动他们各自的品牌成长。
1266 0
现在到底还该不该买房?
最近楼市出了一些消息,让正打算买房的小伙伴们尴尬了。 其中包括: 新京报:厦门楼市神话破灭 中国城市房价已“阶段性见顶” 新京报评论 2018-08-04 从行业发展周期看,我国房地产行业已进入行业发展的下半场。
996 0
解救被困传销女演员 助人减肥找老婆 蚂蚁森林又现神功能
近日,一篇《女演员被传销组织拘禁30多天 竟因蚂蚁森林幸运逃离》的报道引发了全网热议。网友纷纷表示:蚂蚁森林功能强大,不仅能帮人减肥、找老婆,还能在关键时刻保命!
5448 0