内存划分基本单位:字节(Byte)
内存划分最小单位:比特位(bit)
1 字节 = 8 位
1 Byte = 8 bit
几个常见内存关系:
1 KB = 1024 B(2^10)
1 MB = 1024 MB
1 GB = 1024 MB
1 TB = 1024 GB
指针:地址
扩充:VS中有Debug和Release可选,翻译过程和调试过程非常重要,而Debug正好是调试版本,而Release则是发布版本。这是二者区别。
×86——win32(平常基本使用×86系统) 运存4G 32位
win32—>地址总线:32根数 2^32地址编号(数值量)—>2^32字节—>4G空间
×64——win64(比×86系统更为复杂) 运存极限128G 64位
win64—>地址总线:64根数 2^64地址编号(数值量)—>2^64字节—>太大了,满足不了,最多128G空间
1字节为例 = 8位
内存数据的存储模式是什么?——>大小端——>指针验证法和联合体验证
大端储存——>数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中
小端储存——>数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中
进制:
十进制 权重10 取值0~9 1234=4*10^0+3*10^1+2*10^2+1*10^3
二进制 权重2 取值0~1
八进制 权重8 取值0~7
十六进制 权重16 取值0~15
常用方法:辗转相除法 分解法 (分解法贼好使了)
负数:原码、反码、补码。
正数的原码和补码一样,而展示出来的为补码形式,所以正数基本不做区分。
-2 原码1000 0010 符号位在首位 0正 1负
反码1111 1101 除符号位按位取反
补码1111 1110 反码加1
数据类型
内置类型(基本数据类型)
数组类型
指针类型
结构体类型struct
联合体union
枚举enum
自定义数据类型
整型:short(2) int(4) long(4) long long(8)
浮点型:低精度float(4) 高精度double(8)
float val=1.1f 或者1.1F 可以避免警告的2问题 (涉及到转换,默认将其认为double放入float四字节中 部分情况会警告)
字符型:char(1)
布尔型(C++中 C中没有 可以模拟):bool(1) true/false (0false,!0true) java不可01转换(只能C)
float 比较 :
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
float val;
scanf("%f",&val);
if(val==2.2)
{
printf("相等\n");
}
return 0;
}
↑此时运行并不会打印“相等”,通过下断点调试得知scanf的val获取的值为2.20000005,而if中的判断值为2.2000000000000002,“所有位严格匹配相等”出现误差,所以并不“相等”。
改一下判定条件,平常并不会将精度控制如此之高,所以将if(val==2.2)判定条件进行修改,改后代码↓:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define IFC_NUM 0.000001
int main()
{
float val;
scanf("%f",&val);
if(val>=2.2-IFC_NUM && val<=2.2+IFC_NUM)
{
printf("相等\n");
}
return 0;
}
↑上面代码中引入一个精度差值IFC_NUM设置误差值为0.000001(基本上为6位小数)
最后将代码再次优化↓:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#defiine IFC_NUM 0.000001
#include<math.h>
int main()
{
float val;
scanf("%f",&val);
if(fabs(val-2.2)<=IFC_NUM)
{
printf("相等\n");
}
/*if(val>=2.2-IFC_NUM && val<=2.2+IFC_NUM)
{
printf("相等\n");
}*/
return 0;
}
↑引入了math库,采用原本的abs只能计算整型int类型的绝对值,因此使用fabs,可以计算小数绝对值。
int val1 = -1; 有符号
unsigned int val2 = -1;无符号
二者不相等,取值范围若[-100,100],数据容量201:有符号-100——0——100,无符号0——200
有符号: 0111 1111:127 2^7-1
1000 0000:-128 -2^7
1字节为例 -2^7 ~2^7-1
无符号unsigned:[0,255]
记一下:
short -32768~32767(记不了电话号码)
int +-21开头的十位数(记不了电话号码)
所以涉及到电话号码 盲开longlong
“大数相加”——爆longlong的题目 俩非常大的整数相加 要用字符串做题
笔记时间2024/1/15