基础数据类型与算术运算符

发布于 2022-05-06  133 次阅读


数据基础

数据类型宽度是这种数据类型占多大的空间,基于微软的msvc编辑器而言

无符号和有符号的区别

符号的意思是允许存在负数,这里的符号指的是负数符号

在32位中,这里的数字并不完全表示一个数字,31位描述这个数字,而最高位的值表示符号位,表示是否是负数

这里最高位为1,其就是负数(最高位:32位)

这个数字就是在32位情况下,int类型能取得的最大正数值

但是正数中又包含0

所以32位下,int类型的范围是

-2,147,483,648 ~ 2,147,483,647

无符号的int类型范围是

0 ~ 2,147,483,647 *2 +1

Long Long 类型的无符号中, 范围已经是64位中最大的了

如果超出这个数,必须使用高低位拼接的方式进行拼接

不同数据类型的打印方法

初始化进制数据

各进制后面不要加入不属于此进制范围的数据

初始化原理

在我们定义int类型的时候

例如 int b;

定义了一个int类型,然后变量名为b

它在计算机中实际上是创建了一块32位内存空间,然后用变量名标记这块空间

此时int b =1;

就将1写入这个内存空间里面

%d是打印十进制整数型

%o是八进制

%x是十六进制

如果x是大写,那么在16进制中的ab等字母也会大写

如果想让其将前面的0x 0b等打印

可加个#

其他类型的打印符号:

short短整数类型:%hd

long长整数类型:%ld

long long 长长整数类型: %lld

字符类型与特殊字符

tips:char类型只能存储ascii编码的,unicode编码无法存储(因为unicode编码需要占2个字节)

字符初始化:

char ca = 'A';

tips:这里必须是单引号,双引号表示字符串(但是c语言中没有绝对的字符串,所谓的字符串为字符数组)

但是可以用ascii替换

比如A对应的ascii码为65

那么

char ca = 65;

也可以输出A

(所以,char类型也是一种整型,就在这里体现)

非打印字符

浮点数类型

浮点数定义与其他数据类型一样

打印时

float类型是%f

double类型是%Lf

浮点数不会精确存储

需要判断时,不要用准确的一个值进行判断,去判断它的范围

布尔类型

内存中的字符串

比如字符串creek,在内存中表示 的则为上图一样,一个格子代表一个字节,\0是字符串内存中的00结尾(内存中是00,表示的话是\0)

每一个字节存放一个字符,而字符串就相当于一段连续的内存,各个内存中的是一个char类型

字符串数组表示方法

我们通过调试可以看到,arrStr在内存中分配的地址为0x0096F76C

在没有给其赋值时,它的内存中写入的全是00

而我们赋值后发现其内存中写入的东西发生了改变,将creek写入到其内存中,而6b后面的00则是我们写的\0

常量与预处理器

常量:#denfine

只读: const

#denfine是定义宏,宏是全局常量,可随时调用且不限制类型

宏是预处理文件(预处理就是程序运行先处理的部分)

const:

const是定义只读的,无法进行值的修改

Scanf和Printf

Scanf是用来接受用户输入的东西,默认是不安全禁用的

我们只需要在文件预处理部分加入_CRT_SECURE_NO_WARNINGS即可使用

这里scanf中,int类型必须是加&符号,&的功能是求a的内存地址

指针相关

这里的7b 00 00 00就是a的内存地址,scanf相当于将&a作为一个指针,传入到函数内部

函数内部接收到了缓冲区的值,再将值填入内存地址中,再返回来(如果不通过地址就没有办法返回)

字符数组(字符串)不需要&符号取地址,因为其本身变量名就代表一个地址

算术运算符