前言
对于整型家族里的C语言内置数据结构:char,short,int long来说,都有无符号(unsigned)和有符号(signed)之分。整型家族在内存中都是以补码的形式存在.
一、整型家族
char :unsigned char,signed char
short :unsigned short,unsigned short
int :unsigned int,signed int
long:unsigned long,signed long
二、什么是原码,反码,补码
整型家族在内存中都是以补码的形式存在,对于正数来说,它的原码,反码,补码相同,对于负数,用以下的例子说明
int i=-2;
我们把i按照二进制序列写出来就是i的原码(把10进制数字写成32位的二进制数字),原码的首位叫做符号位,首位为0代码整数,首位为1代表负数,因为i是int类型,占四个字节,32个比特位,每一个比特位对应一个二进制数字0或者1,那么i的原码就是:
10000000 00000000 00000000 00000010
对原码除符号位以外的每一位按位取反的到反码,则i的反码为:
11111111 11111111 11111111 11111101
反码加一个二级制的1,得到补码,则i的补码为
11111111 11111111 11111111 11111110
三、存储
1.大端存储
数据的低位存储在内存的高地址中,数据的高位存储在内存的低地址中
2.小端存储
数据的低位存储在内存的低地址中,数据的高位存储在内存的高地址中
3.判断存储模式
int judge()
{
int i=1; //1的二进制补码00000000000000000000000000000001
// 16进制:0x 00000001
return *(char*)&i; //char*类型解引用时,i只能向上访问一个字节,
//俩个16进制位是1个字节,如果是大端存储,返回0,小端存储返回1
}
#include<stdio.h>
int main()
{
int ret=judge();
if(ret==1)
printf("小端“);
else
printf("大端”);
}