20200331学习笔记

浮生日记

2020.3.31 晴
今天又是菜鸡的一天,刷题入门题就不会,心态崩了
dp,一定拿下!

c语言相关

参考链接:
https://blog.csdn.net/danxibaoxxx/article/details/81236180
https://blog.csdn.net/CV_Jason/article/details/85244813
https://blog.csdn.net/bestkilly/article/details/80659109?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/abaloon/article/details/8173552
https://blog.csdn.net/ai_yue/article/details/82777806?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

ld&lf

这涉及到了c语言的精度问题。
首先看常见数据类型的取值范围:
char -128 ~ +127 (1 Byte)
short -32767 ~ + 32768 (2 Bytes)
unsigned short 0 ~ 65536 (2 Bytes)
int -2147483648 ~ +2147483647 (4 Bytes)
unsigned int 0 ~ 4294967295 (4 Bytes)
long == int
long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes)
double 1.7 * 10^308 (8 Bytes)
unsigned int 0~4294967295
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
结论:
输入输出long long/double的时候需要用%ld/%lf

存储形式

存储形式参考第三个链接,需要注意的是阶码是怎么得来的,我一开始也想错了。

补码表示范围

为什么八位二进制补码的表示范围是-128 — +127?
首先明确第一位是符号位。
以下为原码表示:
正数: +0—+127
00000000—01111111
负数:-0 —- -127
10000000 —- 11111111


无符号数10000000代表128,在补码中本来应该是-0,由于一个数对应一个补码,所以-0的补码用来表示-128。这也解释了为什么8位二进制数可表示的范围是-128~127。