当前位置: 首页 > news >正文

数据储存以及大小端判断

目录

数据存储 

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* 

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

http://www.lryc.cn/news/7374.html

相关文章:

  • GRASP设计原则
  • 再遇周杰伦隐私协议
  • 关于项目上的一些小操作记录
  • sql查询不以某些指定字符开头(正则表达式)
  • 35.网络结构与模型压缩、加速-2
  • FreeSWITCH跨NAT部署配置详解
  • 【精选论文 | Capon算法与MUSIC算法性能的比较与分析】
  • 卫星、无人机平台的多光谱数据在地质、土壤调查和农业等需要用什么?
  • 30个题型+代码(冲刺2023蓝桥杯)
  • 快速且有效减小代码包的方法
  • 基于matlab评估星载合成孔径雷达性能
  • Linux_基本指令
  • Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏
  • 从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法
  • 零基础机器学习做游戏辅助第十二课--原神自动钓鱼(二)
  • MapReduce paper(2004)-阅读笔记
  • 【蒸滴C】C语言指针入门很难?看这一篇就够了
  • C++11新的类功能
  • Laravel创建定时任务
  • SaveInstanceState
  • Fluent Python 笔记 第 16 章 协程
  • 山东科技大学校历 代码分析 获得以前学期学年的老版校历
  • 第五章.与学习相关技巧—权重初始值(随机初始值,Xavier初始值,He初始值)
  • Linux进程间通信(管道)
  • 写一个基于node.js的api后台管理系统(三)
  • 【23种设计模式】行为型模式详细介绍(上)
  • PID控制算法进阶
  • 嵌入式工程师有什么值得一看的网站和书籍吗?
  • 操作系统的四个特征
  • Django框架之模型shell工具和查看MySQL数据库日志