C语言 数据存储 char int 数据存储 关于原码反码补码

news2024/11/16 12:04:07

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

上图 前五个整形是整形家族,为什么char也是 因为他是字符型 字符实际存储的时候寸的是这个的ascll值 ascll值是个整数
在这里插入图片描述


除了以上两种 还有构造类型 又叫自定义类型
在这里插入图片描述
为什么又数组类型 如下代码 arr和【】的内容都可以自定义
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
为什么出现以上情况.(ffff 是16进制表示形式)
-10放到内存中应该先显示原码
按照数据的设置直接写出的二进制序列就是原码
原码符号位不变,其他位按位取反,得到就是反码
反码+1得到就是补码

数据在内存中以2进制的形式存储
对于整数来说
整数二进制又3中表示形式:原码 反码补码
正整数“原码 反码补码相同
负整数:原码反码 补码要进行计算

int main()
{
	int a = -10;
	//
	//1000000 00000000 00000000 00001010 原码
	//1111111 11111111 11111111 11110101  反码
	//1111111 11111111 11111111 11110110  补码
	//换算成16进制
	//fffffff6
	return 0;
}

两个十六进制数就等于八个二进制数

所以得出整数在内存存储的时候以二进制补码存储的

那么为什么存补码

在这里插入图片描述

cpu只有加法器 比如 1-1 是不行的实际上它是 1+(-1)

int main()
{
	//1+(-1)
	//000000000000000000000000001    1的原码
	//100000000000000000000000001    -1的原码
	//100000000000000000000000010     的出来-2



	//000000000000000000000000001 正数原反补相同  这是1的补码
    //111111111111111111111111111  -1补码
	//1000000000000000000000000000  相加的结果多一位。只能32为 多了一位就进上去  1就丢了所以结果全0 

	return 0;
}

在这里插入图片描述
所以出现以下情况

在这里插入图片描述

int main()
{
	int a = 10;
	int b = -10;
	//00000000000000000000001010
	//0000000a  转化为16进制


	return 0;
}

大端 小端字节序

在这里插入图片描述

11是高位 44是低位

在这里插入图片描述
所以判断这个代码是小端存储


98

在这里插入图片描述
拿第一个字节用char类型变量 然后强制类型转换为int

int main()
{
	int a = 1;
	char* pa = (char*)&a;//a放整形地址所以需要强制类型转换
	if (*pa == 1)
	{

		printf("小端字节序");
	}
	else
	{
		printf("小端字节序");
	}
	return 0;
}

写成一个函数如下

int check_sys()
{
	
		int a = 1;
		char* pa = (char*)&a;
		if (*pa == 1)
		{

			return 1;
		}
		else
		{
			return 0;
		}
		
	

}



int main()
{
	int ret = 0;
	ret = check_sys();
	if (ret == 1)
	{

		printf("小端字节序");
	}
	else
	{
		printf("小端字节序");
	}
	return 0;
}

函数还可以更简洁 如下

int check_sys()
{
	
		int a = 1;
		char* p = (char*)&a;
		return *p;//返回一表小端  0表大端
	

}



int main()
{
	int ret = 0;
	ret = check_sys();
	if (ret == 1)
	{

		printf("小端字节序");
	}
	else
	{
		printf("小端字节序");
	}
	return 0;
}

计算abc的打印结果

int main()
{
	char a = -1;
	//100000000000000000000001    原码
	//111111111111111111111110    反码
	//111111111111111111111111    -1的补码
	//11111111  因为char是一个字节  一个字节8个bit位
	//11111111111111111111111  整型提升为全1  补码形式整型提升
	//10000000000000000000001          打印原码


	signed char b = -1;
	unsigned char c = -1;
	//00000000000001111111111整形提升    c是无符号整形提升高位补0 .因为整数原反补相同
	printf("a=%d b=%d c=%d", a, b, c);
	//整型提升看的是符号位提升  打印的时候看的是原码`在这里插入代码片`
	return 0;
}//输出结果为 -1  -1 255   c是无符号整形提升高位补0 .因为整数原反补相同

在这里插入图片描述


下面程序输出的结果


int main()
{
	char a = -128;
	//10000000000000000000000010000000
	//11111111111111111111111101111111
	//11111111111111111111111110000000  补码
	//10000000  需要整型提升 char是有符号的 高位1就认为是符号位所以高位补1
	//11111111111111111111111110000000   打印是u无符号为打印 他的高位就不是符号位。相当于他是正数.所以最后结果就是这个  



	printf("%u\n", a);

	return 0;
}

**输出结果为4294967168

如果换成%d 打印结果为-128**

第三题

int main()
{
	char a = 128;
	printf("%u", a);

	return 0;
}

解析如下

int main()
{
	char a = 128;
	//00000000000000000000000010000000 原反补相同
	//10000000
	//整型提升看的是原来的类型 char是有符号位  所以高位补1
	//11111111111111111111111110000000
	//%u 打印 是无符号数  无符号数原反补相同
	printf("%u", a);

	return 0;
}//输出结果 4294967168

就上面的描述探讨下char的取值范围

一个char类型 8个bit位 存放数据可能出现的情况有以下几种
00000000 0
00000001 1
00000010 2
011111111 127
分割线 以上全为正数
10000000 -128 那么为什么
10000001 10000000 11111111 -127
.。。
11111110 11111101 10000010 -2
11111111
11111110 10000001 -1

为什么 解答如下
-128
10000000 00000000 00000000 10000000
111111111 111111111 111111111 011111111
111111111 111111111 111111111 10000000 这后8位刚好与上相同

所以得出结论 有符号的char取值范围是:-128~127取值范围
放不进去128 只是发生了截断 截断一部分值而已

第四题

int main()
{
	int i = -20;
	//100000000000000000000010100
	//111111111111111111111101011
	//111111111111111111111101100  补码
	unsigned int j = 10;

	//000000000000000000000001010
	printf("%d\n", i + j);
	//先相加再打印   
	//111111111111111111111101100  补码
	//000000000000000000000001010
	
	//111111111111111111111110110补码  因为%d打印原码再进行转换
	//111111111111111111111110101    -1得反码
	//100000000000000000000001010    取反  的原码
	//

	return 0;
}结果负10

第五题

//5
int main()
{
	unsigned int i;
	for (i = 9; i >= 0;)
	{          //i>=0恒成立 无论怎么变都死循环 。条件为假才停下来最低等于0

		printf("%u\n", i);
	}

	return 0;
}//结果死循环  unsigned永远不要定义等于0否则死循环,i-- i的值被释放成一个正整数 所以不可能是-1 所以i永远大于等于0

第六题

int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;


	}
	printf("%d", strlen(a));

	return 0;
}

在这里插入图片描述
如上分析 char类型取值范围-128到127

int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;


	}
	//-1 -2  -3 ...-127 -128 127 126 125 ...3 2 1 0  -1  -2 ..-127 -128   127
	printf("%d", strlen(a));//求a数组里的  找到\0    其实就是找0  \0的ASCII码是0

	return 0;
}
//-1一直被减,直到-128,跳到127继续被减,然后到0,而strlen遇见0就结束






拓展 129放进去会变成什么

**129相当于127加2 当你把129存进去的时候的到的是-127 不会是129 **
129 原码 存入char截断第二部
0000000000000000000010000001
10000001补码
10000000
111111111 原码
-127

在这里插入图片描述

第7题

unsigned char i = 0;
int main()
{
	for (i = 0; i < 255; i++)
	{

		printf("hello world\n");
	}


	return 0;
}//unsigned char 最大时255 所以死循环

浮点型预知

在这里插入图片描述
在这里插入图片描述
下篇讲解…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券|通过磁铁制造功率更大的电动汽车电池

德克萨斯大学奥斯汀分校的研讨人员表明&#xff0c;一个更厚的电极&#xff0c;经过磁优化的离子道路&#xff0c;能够使充电更快&#xff0c;充电之间的功率更大。 研讨人员制作了一种具有‘快速通道’摆放的电极&#xff0c;以进步充电速度和续航路程。 研讨人员发现了一种共…

Apache Hudi 数据湖介绍

目录​​​​​​​ Apache Hudi 数据湖介绍 Hudi 历程 Hudi Features Apache Hudi 数据湖介绍 Apache Hudi&#xff08;发音为“hoodie”&#xff09;是下一代流媒体数据湖平台源于Uber 。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的追加…

[附源码]Nodejs计算机毕业设计基于云数据库的便民民宿租赁系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

人人都能看懂的Spring底层原理,看完绝对不会懵逼

人人都能看懂的Spring原理&#xff0c;绝对不会懵逼为什么要使用Spring&#xff1f;Spring的核心组件Spring是如何实现IOC和DI的&#xff1f;定义了BeanDefinition扫描加载BeanDefinition根据BeanDefinition进行Bean的实例化和初始化实例化属性赋值保存到单例缓冲池一个Bean从创…

docker高级篇2-分布式存储之三种算法

面试题&#xff1a; 1~2亿条数据需要缓存&#xff0c;请问如何设计这个缓存案例&#xff1f; 答&#xff1a;单机单台100%是不可能的。肯定是分布式缓存的。那么用Redis如何落地&#xff1f; 一般有三种方案&#xff1a; 哈希取余分区&#xff1b;一致性哈希算法分区&#…

HttpRunner4.x 安装与使用

HttpRunner4.x 安装与使用HttpRunner4.x 安装与使用安装使用运行脚手架项目方式一&#xff1a;录制生成用例步骤1&#xff1a;导出har文件步骤2&#xff1a;转化成测试用例文件步骤3&#xff1a;执行测试用例方式二&#xff1a;手工编写测试用例HttpRunner4.x 安装与使用 以下…

卡塔尔世界杯终局之战,阿根廷VS法国,是老将加冕还是新王登基?

【世界杯】阿根廷VS法国 不知不觉&#xff0c;世界杯已经走到最后的尾声&#xff0c;此前经历的28天&#xff0c;63场比赛皆是铺垫&#xff0c;卢赛尔体育场将会迎来2022卡塔尔世界杯最终的决赛&#xff0c;究竟是梅西球王加冕还是法国卫冕世界杯冠军&#xff0c;今晚23&#x…

KNN算法 鸢尾花种类预测

目录 一&#xff1a;KNN原理 二&#xff1a;数据处理 三&#xff1a;超参调试、模型保存及使用 四&#xff1a;鸢尾花种类预测 详细步骤 一&#xff1a;KNN原理 从训练集中找到跟待测数据最近的k条记录 根据这些记录的分类决定新数据的分类 主要因素包括有&#xff1a;K邻…

java------JVM之类加载和双亲委派机制

类加载器&#xff1a;加载.class文件。 将新建的对象放入堆里面&#xff0c;而对象的引用(地址)放到栈&#xff0c;其中引用指向堆里面对应的对象。 1-启动类加载器&#xff0c;负责加载jre\lib目录下的rt.jar包c编写&#xff0c;加载java核心库 java.*,构造ExtClassLoader和A…

[CocosCreator]封装行为树(一)

(老规矩:广告位留给自己) 欢迎喜欢或者从事CocosCreator开发的小伙伴请加入我的大家庭CocosCreator游戏开发Q群:26855530 行为树的定义:控制AI实体决策流程的分层节点树。游戏中Npc的活动,或者主角挂机行为都十分依赖行为树,本章开始,封装适用CococCreator使用的TypeScript行…

Mongo基本操作

文章目录核心概念库<DataBase>集合<Collection>文档<Document>MySQL与MongoDB关系总结基本操作库<database>集合<Collection>文档<document>文档查询ANDORAND 和 OR 联合模糊查询排序分页总条数去重指定返回字段索引<index>操作复合…

vmware ESXI 7 升级ESXI 8

1 、上传VMware-Esxi-8.0安装包 2开启ssh 3、 远程登录到Esxi主机 ssh root192.168.31.119 [rootlocalhost:~] 4、升级到Esxi 8.0 [rootlocalhost:~] esxcli software sources profile list -d /vmfs/volumes/datastore1/iso/VMware-ESXi-8.0-20513097-depot.zip Name Vend…

软件设计师——项目管理

文章目录Gantt图与Pert图风险管理配置管理沟通管理题目举例Gantt图与Pert图 甘特图能够清晰描述每个任务的开始 / 结束时间及各任务之间的并行性&#xff0c;也可以动态地反映项目的开发进展情况&#xff0c;但难以反映多个任务之间存在的逻辑关系&#xff1b;PERT 利用项目的…

基于 Tensorflow 2.x 实现 BP 神经网络,实践 MNIST 手写数字识别

一、MNIST 数据集 MNIST 是一个非常有名的手写数字识别数据集&#xff0c;在很多资料中都会被用作深度学习的入门样例。在 Tensorflow 2.x 中该数据集已被封装在了 tf.keras.datasets 工具包下&#xff0c;如果没有指定数据集的位置&#xff0c;并先前也没有使用过&#xff0c…

【Java语言】— Java基础语法01

Java基础语法 1.注释 什么是注释 注释是写在程序中对代码进行解释说明的文字&#xff0c;方便自己和他人查看&#xff0c;以便理解程序。 注释有哪些 &#xff08;1&#xff09;单行注释 // 注释内容&#xff0c;只能写一行&#xff08;2&#xff09;多行注释 /* 注释内…

数据结构---判断一个数是否为2的整数次幂

判断一个数是否为2的整数次幂穷举法JAVA实现移位操作优化性能JAVA实现按位与JAVA实现实现一个方法&#xff0c;来判断一个正整数是否是2的整数次幂&#xff08;如16是2的4次方&#xff0c;返回true&#xff1b;18不是2的整数次幂&#xff0c;则返回false&#xff09;。要求性能…

BFS——Flood Fill模型及最短路模型

文章目录Flood Fill模型概述模板池塘计数城堡问题山峰和山谷最短路模型概述迷宫问题武士风度的牛抓住那头牛总结Flood Fill模型 概述 定义 从一个起始节点开始把附近与其连通的节点提取出或填充成不同颜色颜色&#xff0c;直到封闭区域内的所有节点都被处理过为止&#xff0c…

关于 SAP Gateway 响应头部 Last Modified 字段的赋值逻辑

本教程迄今为止&#xff0c;讨论的绝大多数都是 OData 服务数据实现类(Data Provider Class) 的实现。而要讨论 OData 服务的元数据话题&#xff0c;就得去 MPC 类研究。 MPC 类的 define 方法&#xff0c;负责生成 OData metadata 元数据&#xff1a; Postman 里请求元数据&…

​6. 独享锁 VS 共享锁

独享锁和共享锁同样是一种概念。我们先介绍一下具体的概念&#xff0c;然后通过ReentrantLock和ReentrantReadWriteLock的源码来介绍独享锁和共享锁。 独享锁也叫排他锁&#xff0c;是指该锁一次只能被一个线程所持有。如果线程T对数据A加上排它锁后&#xff0c;则其他线程不能…

Linux典型IO模型:阻塞、非阻塞、信号驱动、异步

目录 一、阻塞IO 二、非阻塞IO 三、信号驱动IO 四、异步IO 五、阻塞VS非阻塞&#xff08;概念&#xff09; 1.阻塞 2.非阻塞 3.区别与联系 六、同步VS异步&#xff08;概念&#xff09; 1.同步 2.异步 3.区别与联系 IO就是输入输出 一、阻塞IO 为了完成IO发起IO调…