1.数据的类型介绍
我们学习到一些内置类型:
char
int等
而这类类型的意义:
1.开辟了内存空间的大小(大小决定了使用范围)
2.如何看待内存空间的视角。
ps:unsigned 是无符号型
eg:unsigned int a;
2.整形在内存中的存储
我们是如何在内存存储数据的呢?
例如
int a = 20;
int b = -20;
我们都知道一个int 类型占用四个字节
想知道如何存储的,我们就要学习到以下知识
2.1 原码 、反码、补码
计算机内部的整数有三种二进制存储方式:原码,反码,补码。
上述三种:都包含符号位、整数位俩部分!
符号位: 1表示负数 0表示 整数
但是如果这个数是正整数原码,反码,补码都一样;
原码:直接通过正负的形式写出的二进制序列就是原码!
反码:原码的符号位不变,其他位按位取反得到
补码:反码+1
补码—————>原码 : 也可以用先取反在+1;
在计算机中 用数据的补码来存储
原因在于 :可以将符号位与数值统一处理;
同时加法和减法可以统一处理
00000000000000000000000000000001 1//如果用原码加减
10000000000000000000000000000001 -1
10000000000000000000000000000010 //结果并不是 0
但如果用补码计算
00000000000000000000000000000001 1
//反码原码补码相同
10000000000000000000000000000001 //原码
11111111111111111111111111111110 //反码
11111111111111111111111111111111 //补码
//加减之后
100000000000000000000000000000000
//注意 此时 发生了截断!
2.2 大小端介绍
假设 一个16进制的数据
小端字节序存储反之;
让我们来做几个题吧!
1.如何实现一个程序来查看本电脑的存储方式是大端还是小端?
代码实现
#include<stdio.h>
int main(){
int i=1;
if(*(*char)&i==1){
printf("小端\n");
}else{
printf("小端\n");
}
return 0;
}
2.
观察以下代码;
int main() {
char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("%d %d %d ", a, b, c);
return 0;
}
a,b,c的值是多少?
所以答案是 -1 -1 255;
记住 先发生截断、整形提升在 打印!!!!