数据储存-数据类型:整形储存和大小端

整形 数值有不同表示形式

  • 2进制------0b10101---1  4  16///十进制的21 

  • 8进制-----025  5*8^0+2*8^1=21

  • 10进制---21

  • 16进制---0x15----5*16^0+1*16^1==5+16

整数在内存中的存储:
整数的二进制表示也有3种:

  1.  1.正整数,原码,反码,补码相同

  2.  2.负的整数,原码,反码,补码是需要计算的

  • 原码:直接通过正负的形式写出的二进制序列就是原码

  • 反码:原码的符号位不变,其他位按位取法得到的就是反码

  • 补码:反码+1就是补码

整数内存放的是补码的二进制序列

int main()
{
	int a = 20;
//	//20
//	//0000 0000 0000 0000 0000 0000 0000 10100
//	// 0x 00 00 14--十六进制
//	//0000 0000 0000 0000 0000 0000 0000 10100 
//	//4位二进制表示一个16进制
//	//0000 0000 0000 0000 0000 0000 0000 10100
	int b = -10;
//	//1000 0000 0000 0000 0000 0000 0000 01010--原码
//	// 0x80 00 00 0a
//	//1111 1111 1111 1111 1111 1111 1111 10101--反码
//	// 0xff ff ff fa
//	//1111 1111 1111 1111 1111 1111 1111 0110--补码
//	//0xff ff ff f6
	return 0;
}

大端【字节序】储存:把一个数据的高位字节序的内容存放在低地址处,把低地址字节序的内容放在高地址处。

11        22        33        44                                       44        33        22        11

                        低地址                        (实际储存的是二进制)                       高地址

小端【字节序】储存:把一个数据的高位字节序内容放在高地址处,把低位字节序的内容放在低地址处。

内存:补码

有符号的char(signed char):-128~127

00000000   0
00000001   1
00000010   3
00000011   4
。。。。。。
01111111 127
10000000(

反码+1会进位:-128) 

.。。。。。
11111110  -2
11111111  -1

无符号数charunsigned char):0~255

00000000   0
00000001   1
00000010   3
00000011   4
。。。。。。
01111111 128
10000000 129
.。。。。。
11111110  254
11111111  255

 

int main()
{
	char a = -1;
	//10000000 00000000 00000000 00000001
	//11111111 11111111 11111111 11111110
	//11111111 11111111 11111111 截断->11111111
	//1111111 -a
	//%d---是打印有符号的整形
	//整形提升
	//111111111 11111111 11111111 11111111-内存的补码
	//10000000 00000000 000000000 00000000-->反码
	//10000000 00000000 000000000 00000000--> 原码-->-1
	signed char b = -1;
	unsigned char c = -1;
	//10000000 00000000 00000000 00000001
	//11111111 11111111 11111111 11111110
	//11111111 11111111 11111111 截断->11111111
	//1111111 -c
	//整形提升
	//因为是unsigned char
	//所以补0---00000000 000000000 00000000 11111111--内存补码--255
	//正整数的补码,原码,和反码相同
	printf("a=%d,b=%d,c=%d", a, b, c);
	//-1 -1 255
	return 0;
}

%u--打印无符号整形

int main()
{
	char a = -128;
	printf("%d\n", a);
	printf("%u\n", a);
	//10000000 00000000 000000000 100000000
	//11111111 11111111 111111111 011111111
	//11111111 11111111 111111111 100000000
	//10000000-a
	//11111111 11111111 111111111 100000000-提升
	//%u--打印无符号整数--内存存放的是原码
	//%d--内存存放的是反码
	return 0;
}
int main()
{
	char a = 128;
	//00000000 00000000 00000000 10000000
	//100000000-a
	printf("%u\n", a);
	//char--有符号整形
	//符号位->(最高位)100000000-a
	//11111111 11111111 11111111 10000000
	printf("%d\n", a);
	//11111111 11111111 11111111 10000000
	//10000000 00000000 00000000 01111111
	//10000000 00000000 00000000 10000000___-128
	return 0;
}
int main()
{
	int i = -20;
	//100000000 0000000000 000000000 00010100
	//111111111 1111111111 111111111 11101011
	//111111111 1111111111 111111111 11101100
	unsigned int j = 10;
	//000000000 0000000000 000000000 00001010
	printf("%d\n", i + j);
	//111111111 1111111111 111111111 11101100
	// ++++++++++++++++++++++++++++++++++++++
	//000000000 0000000000 000000000 00001010
	//=======================================
	//111111111 1111111111 111111111 11110110---补码
	//100000000 0000000000 000000000 00001001(%d--符号位不变)
	//100000000 0000000000 000000000 00001010
	return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值