1首先了解 低字节位 和高字节位看图

2字节在内存的排列方式

//intnum=010;//0开头代表8禁止//("%d",num);//所以打印的是8intnum=0x12345678;//将占232位printf("%p",&num);/*要特别注意低位在低字节高位高字节0x0063FAC078x0x0063FAC156V0x0063FAC23440x0063FAC312.*/看图2


3 printf 不会进行自动转换
void main()
{
printf("%d", 10.3);
printf("\n%f", 10);

getchar();
}

请看图3


4 一定要注意数据会溢出数据会溢出
请看图4

unsigned short num = 65535;
printf("我有现金:%d元",num);


unsigned short num = 65535+1;
printf("我有现金:%d元",num);

上面这样数据就会溢出


5 原理

头文件#include<limits.h>printf("%d",INT_MAX);printf("\n%d",INT_MIN);printf("\n%u",UINT_MAX);//有负号的情况下0代表正式1代表负数//11111111111111111111111111111111//01111111111111111111111111111111


6源码反码补码

//1的源码和-1的源码
//0000 0000 0000 0000 0000 0000 0000 0001
//1000 0000 0000 0000 0000 0000 0000 0001
//-1符号为是1


源码反码补码过程
//源码1000 0000 0000 0000 0000 0000 0000 0001


//-1反码1 符号位不变 所有0变1 1变0
//111 1111 1111 1111 1111 1111 1111 1110


//-1补码 符号位不变 所有0变1 1变0 在补1(在反码基础是+1)
//111 1111 1111 1111 1111 1111 1111 1111
unsigned int num = -1;
printf("%d %u", num, num);


虽然补码后二进制相同 但是他们有负号的符号位不算 所以数据不相同


7为什么要用补码 非常重要!!!


0000 0001 1 (1代表十进制)
1000 0010 2 (1000 0010 是2的源码)


如果我们用2的补码
1000 0010 源码

1111 1101 反码(所有位取反 负号不变)

1111 1110 补码(反码基础 +1)


这时候在相加

0000 0001 1
1111 1110 2的补码
1111 1111 是不是就是-1


-1 源码
1000 0001
1111 1110 反码
1111 1111 补码
用补码的原因就是因为可以大大节约计算机的资源


8 数据的取值范围