文章目录
1.数据类型的再回顾
相信各位之前都已经学习过了基本的内置类型
其中long long 类型是在c99标准以后才有的类型。
附上图片:
其中我们注意到C语言中有一个我们不常用的类型,但是和我们平常的判断有关
布尔类型:_Bool -专门用于判断真假的变量(同样是在C99标准开始以后才加入)
//_Bool 用于判断真假
#include <stdbool.h>
int main()
{
_Bool flag = false//(false代表假,true代表真)
if(flag)
{
printf("flag为真\n");
}
//if(flag)括号里的flag与0或非零的作用一样,起判断作用 false 等同于0 true 等同于 1
return 0;
}
使用布尔类型时,记得引头文件<stdbool.h>
仔细去分析_Bool类型以后,发现布尔类型它只是int 类型的重命名
类型的意义:
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)。
2.如何看待内存空间的视角 。
1.1数据类型的基本归类
//当我们直接使用char创建变量时候,unsigned和signed类型取决了编译器,并不是固定的,但是在vs中默认为signed char类型
何时使用unsigned int 类型呢?例:定义一个年龄变量时候,使用unsigned int age ;因为年龄恒为正数;
假设不小心使用了unsigned 类型时候存储了一个负数,它仍然会将它转化为正正数理解并非去掉负号或者符号那么简单;
当我们打印有符号整形时应该用%d打印,用无符号整形时应该用%u
注意到,当我们使用无符号整形存储了一个-10时候,它仍然利用%d的形式直接打印了出来,疑惑来了,那他们不是没有什么区别吗?难道是我前面说了一大堆废话么,并不是,当你使用unsigned类型时候,打印时应该用的是%u,从一开始打印就错了,那么只会一错到底!
真正的情况是这样滴:
会不会顿时觉得,哇amazing!!!,竟然从-10变成这么大一个数,简直就是翻身做地主啊。那么为什么会变化那么大呢,诶别急,后面告诉你答案。
浮点数家族:
构造类型(自定义类型):
数组类型:
例如int arr[10];int arr[5];就是两种类型,我们把函数名这里是arr除去,留下的就是类型名,这里是int 【10】 和 int 【5】 ,所以是自定义类型。
指针类型:
用于对不同类型的变量地址的存储,存储一个变量的地址时候,它们的类型是需要一一对应的。
int main()
{
char a = 'b';
char *pc = &a;
return 0;
}
空类型:
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。
2.整形在内存中的存储
一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。
比如
int a = 10;
int b = -10
在创建a的变量时候,系统为a分配了4个字节的空间。那这些数据是如何存储的呢?
2.1原码、反码、补码
计算机中的整数有三种表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”
负整数的三种表示方法各不相同分别为:
正数的原、反、补码都相同。
对于整形来说:数据存放内存中其实存放的是补码。
首先一步一步来解析:
1.怎样去理解符号位和数值位呢?我用一幅图教会
2.负数具体怎样操作?
刚刚好像漏掉了一个问题,但是在我这篇细致到极致的文章怎么能少呢?“对于整形来说:数据存放内存中其实存放的是补码。”
为什么呢?
我通过一个加法减法的问题对这句话进行一个解释。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5lGFVMB-1642432358813)(C:/Users/22479/AppData/Roaming/Typora/typora-user-images/image-20220117214133533.png)]
不得感叹到当年能想到创造出补码的人实在是太过于强大,最强大脑了属于是。在学习过程中我们也要不断保持敬畏之心!
此外刚刚那句话还提到了**“补码与原码相互转换过程是相同的”**
我们知道,原码到补码的过程是原码**—(按位取反,符号位不变)—>反码—(反码+1)—>**补码
那么我们从这句话可得:补码**—(按位取反,符号位不变)—>反码—(反码+1)—>**原码
一直在提内存内存内存,有没有什么方法让我直观的可以看到数据在内存理的存储方式?
有,必须有!!!今天高低给你整明白它!,盘它!
首先我们在内存中开辟空间分别命名为a和b;
接下来利用vs的的调试模式观察内存里面的信息:
问题不对啊?红框里面明明是0a 00 00 00,顺序有点和你这也对不上啊?
2.2大小端字节序
什么是大端小端:
为什么有大端和小端:
什么低地址高地址,低位高位,我不懂怎么办?上图!
以上两幅图看完以后是不是简洁明了很多了呢?
2.3练习
配套这篇文章也为了让大家寒假过的没那么枯燥,我准备了配套的练习题,
点击这获取