笔记1/2024/1/15

内存划分基本单位:字节(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值