数据储存以及大小端判断

目录

数据存储 

1,二进制存储方式(补码,反码,源码)

2,指针类型

3,大端,小段判断


1,二进制存储方式(补码,反码,源码)

        我们向计算机输入的数据(数字,字符串等)都是怎样存储的呢?

        我们输入的数据计算机将这些数据转化成二进制形式进行存储

        二进制:就是0,1 组成的序列 下面以代码的形式进行展示

//int main()
//{
//	int a = 20;
//	//
//	//00000000000000000000000000010100 - 原码
//	//00000000000000000000000000010100 - 反码
//	//00000000000000000000000000010100 - 补码
//	//00000014
//
//	int b = -10;
//	//
//	//10000000000000000000000000001010 - -10的原码
//	//11111111111111111111111111110101 - -10的反码
//	//11111111111111111111111111110110 - -10的补码
//	//FFFFFFF6
//	//内存中存储的都是二进制数据
//	//
//	return 0;
//}

由上面代码可以看出 对于正整数而言 其 源码,反码,补码 都相同

然而 ,对于复数 它的源码,反码,补码 是不同的

原码 按位取反 得到 反码 反码 加一 得到 补码  

补码 减一  得到 反码 反码 按位取反 得到 原码 

计算机存储的是补码 也是用补码进行计算的 

如:1+(-1)= 0

//int main()
//{
//	1 - 1;
//	1 + (-1);
//	//使用原码计算
//	//00000000000000000000000000000001
//	//10000000000000000000000000000001
//	//10000000000000000000000000000010
//	//-2
//	//00000000000000000000000000000001
//	//10000000000000000000000000000001
//	//11111111111111111111111111111110
//	//11111111111111111111111111111111 -1的补码
//	//00000000000000000000000000000001
//	//11111111111111111111111111111111
//	//00000000000000000000000000000000
//	//
//	return 0;
//}

2,指针类型

int main()
{
    int a = 10;
    int* p = &a;
    
    retuen 0;
}

 a就是一个数据 “&” 取地址操作符 (地址也是二进制位 也有十六进制 他们可以相互转化)

指针类型(管理指针可以向后访问多少个字节)

char*  1个字节  int*  4个字节 

访问几个字节 实则就是 (char int short 等的大小)

 从上图中知道 a的地址是0x012FFE00 十六进制 同时后面的 0a 00 00 00 是存储的数据 10 十六进制  由此可以得出 int* 管理4个字节 

 指针类型 决定 他能访问多少字节 (一个字节8个比特位)

3,大端 小端

字节的高位还是低位怎么判断 10 的十六进制原码 反码 补码相同 用补码存储 00 00 00 0a 从左向右是 16^7 16^6...16^1 16^0 次方不断降低 那么位次也不端降低

 如何用代码去验证计算机是大端还是小端 

 通过上图可知 既然整形 管理四个字节 而第一个字节是 0a 也就是10

那么只要访问它的第一个字节 看他是不是10 就可以验证 具体代码 如下

//int main()
//{
//	int a = 1;
//	char*p = (char*)&a;//int*
//	if (*p == 1)
//		printf("小端\n");
//	else
//		printf("大端\n");
//
//	return 0;
//}

强制类型(char*)转换 也可以去掉 因为地址的大小是相同的 4/8个字节 取决于编译器 

所以char* 可以存储int* 

那么以上就是我介绍的内容 如有错误请指出 会尽快改正~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸡爱玩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值