【C语言】整形在内存中的存储

1、整形在内存中的存储

1.1 原码、反码、补码

计算机中整数有三种二进制表示方法,分别是原码、反码、补码

三种表示方法由符号位和数值位构成符号位用0表示正数,1表示负数。

整形数据在内存中存放的是补码

正数的原码、反码、补码相同

负数的补码=原码的符号位不变,其它位按位取反得到反码,反码+1得到补码

//10
//原码=反码=补码
//00000000 00000000 00000000 00001010
//-10
//10000000 00000000 00000000 00001010 原码
//11111111 11111111 11111111 11110101 反码
//11111111 11111111 11111111 11110110 补码 

为什么整形在内存中存放的是补码?

在计算机系统中,数值一律用补码来表示和存储,原因在于使用补码,可以将符号位和数值位统一处理,同时,加法和减法也可以统一,CPU只有加法。

1.2 大小端

1.2.1 什么是大小端

大端存储模式,是指数据的高位保存在内存的低地址处,数据的低位保存在高地址处。

小端存储模式,是指数据的低位保存在内存的低地址处,数据的高位保存在高地址处。

 1.2.2 为什么要有大小端

 一个数据如果超过一个字节存放在内存里,有存储顺序的问题

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应者一个字节,一个字节为8bit,但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的int型(取决于编译器)。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么。然存在着一个如何将字节安排的问题,因此导致了大小端的存储模式。

1.2.3 大小端判断

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。

int check_sys()
{
	int a = 1;
	//00000000 00000000 00000000 00000001
	//0x 00 00 00 01
	//小端存储 01 00 00 00
	//大端存储 00 00 00 01
	//char* p = (char*)&a;//强制转换成char*
	//char*的指针解引用可以访问一个字节
	//&a 第一个字节地址保存在char*的指针中
	//if (*p == 1)
	//{
	//	return 1;//小端
	//}
	//else
	//{
	//	return 0;//大端
	//}

	//return *p;
	return *(char*)&a;//先取地址 取地址后强制类型转换成char*地址 解引用访问一个字节
}
int main()
{
	int ret=check_sys();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

1.3 相关练习题

//练习1
int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("a=%d,b=%d,c=%d", a, b, c);
	return 0;
}
//结果 -1 -1 255
//解析
int main()
{
	char a = -1;
	//-1
	//10000000 00000000 00000000 00000001
	//11111111 11111111 11111111 11111110
	//11111111 11111111 11111111 11111111 补码
	// 有符号char a里存放低八个比特位
	//11111111
	//以%d的形式打印 打印一个整形 有符号char 不够一个整形 整形提升
	//当打印a的时候要发生整形提升
	//整形提升补的是原来变量的符号位
	//11111111 11111111 11111111 11111111 提升之后的补码
	//打印的是有符号数 补码->原码
	//10000000 00000000 00000000 00000001

	signed char b = -1;
	unsigned char c = -1;
	//-1
	//10000000 00000000 00000000 00000001
	//11111111 11111111 11111111 11111110
	//11111111 11111111 11111111 11111111 补码
	//11111111 c里存放
	//c是%d的形式打印 打印一个整形 要整形提升
	//c是unsigned char 高位补0
	//00000000 00000000 00000000 11111111 补码
	//高位是0 0是整数 原码反码补码相同

	printf("a=%d,b=%d,c=%d", a, b, c);
	return 0;
}
//练习2
int main()
{
	char a = -128;
	printf("%u\n", a);
	return 0;
}
//结果 4294967168
int main()
{
	char a = 128;
	//-128
	//10000000 000000000 00000000 100000000
	//11111111 111111111 11111111 011111111
	//11111111 111111111 11111111 100000000
	//10000000发生截断 保留低八个比特位
	//%u 指的是打印无符号整数
	// 整形
	//11111111 111111111 11111111 100000000
	//%u 补码=原码
	printf("%u\n", a);
	return 0;
}
//练习3
int main()
{
	char a = 128;
	printf("%u\n", a);
	return 0;
}
//结果 4294967168
int main()
{
	char a = 128;
	//128
	//00000000 000000000 00000000 100000000
	//10000000-a发生截断 保留低八个比特位
	//按照%u打印 对a进行整形提升 指的是打印无符号整数
	// 整形
	//11111111 111111111 11111111 100000000
	//%u 补码=原码
	printf("%u\n", a);
	return 0;
}
//练习4
int main()
{
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i + j);
	return 0;
}
int main()
{
	int i = -20;
	//-20
	//100000000 00000000 00000000 00010100
	//111111111 11111111 11111111 11101011
	//111111111 11111111 11111111 11101100 -20的补码
	
	unsigned int j = 10;
	//10
	//000000000 00000000 00000000 00001010
	//-20+10
	//000000000 00000000 00000000 00001010
	//111111111 11111111 11111111 11101100
	//111111111 11111111 11111111 11110110 补码 %d有符号整数
	//111111111 11111111 11111111 11110101
	//100000000 00000000 00000000 00001010
	printf("%d\n", i + j);
	//111111111 11111111 11111111 11110110 补码 %d有符号整数
	//111111111 11111111 11111111 11110101
	//100000000 00000000 00000000 00001010
	return 0;
}
//练习5
int main()
{
	unsigned  int i;
	for (i = 9; i >= 0; i--)
	{
		printf("%u\n", i);
	}
	return 0;
}
//无符号整形最小值是0 没有符号位
//9 8 7 6 5 4 3 2 1 0 -1
//-1对于无符号整形来说是32个比特位都是1
//-1
//10000000 00000000 00000000 00000001 原码
//11111111 11111111 11111111 11111110 反码
//11111111 11111111 11111111 11111111 补码
//编译器不认为补码的符号位是负数,理解成正数
//编译器按照正整数打印
//打印从9-0-4294967295-0-4294967295-0循环下去
//练习6
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d", strlen(a));
	return 0;
}
//数组a中元素
//-1 -2 -3 -128 127 126 ....3 2 1 0 -1 -2..........
strlen是求字符串长度的 找的是\0的位置,统计\0之前出现多少个字符
//'\0'的ASCII码值是0
//数组每个元素char类型的值,有符号的char表示值的范围-128-127
//值的范围是 0->127->-128->-1->0
//字符串为255个(128+127)
//练习7
unsigned char i = 0;
int main()
{
	for (i = 0; i <= 255; i++)
	{
		printf("hello world\n");
	}
	return 0;
}
//死循环打印hello world
//无符号的char取值范围是0-255

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JSP:MVC

Web应用 一个好的Web应用&#xff1a; 功能完善 易于实现和维护 易于扩展等 的体系结构 一个Web应用通常分为两个部分&#xff1a; m 1. 由界面设计人员完成的 表示层 &#xff08;主要做网页界面设计&#xff09; m 2. 由程序设计人员实现的 行为层 &#xff08;主要完成本…

利用企业被执行人信息查询API保障商业交易安全

前言 在当今竞争激烈的商业环境中&#xff0c;企业为了保障商业交易的安全性不断寻求新的手段。随着技术的发展&#xff0c;利用企业被执行人信息查询API已经成为了一种强有力的工具&#xff0c;能够帮助企业在商业交易中降低风险&#xff0c;提高合作的信任度。 企业被执行人…

ArcMap针对正射影像图生成切片操作

1.导入图层jpg文件 2.添加地图坐标系 右键点击地图 --》数据框属性 坐标系选项设置地图的坐标系 地图应该有对应的坐标文件 3.地理配准选项 --》去除自动校正&#xff0c; 4.选择参考坐标 在图中选三个定位坐标保存 5.地理配准选项 --》更新地理位置配准 6.管理工具下 --》…

2023仿聚合搜索程序源码/轻量级搜狗泛站群程序源码/PHP整站源码+完美SEO优化+符合搜狗算法

源码简介&#xff1a; 2023仿聚合搜索/轻量级搜狗泛站群程序整站源码&#xff0c;作为PHP源码&#xff0c;可以完美SEO优化&#xff0c;符合搜狗搜索引擎算法。 轻量级的PHP搜狗泛站群程序源码&#xff0c;完美SEO优化符合搜狗搜索引擎算法&#xff0c;无需任何采集&#xff…

如何有效减少 AI 模型的数据中心能源消耗?

在让人工智能变得更好的竞赛中&#xff0c;麻省理工学院&#xff08;MIT&#xff09;林肯实验室正在开发降低功耗、高效训练和透明能源使用的方法。 在 Google 上搜索航班时&#xff0c;您可能已经注意到&#xff0c;现在每个航班的碳排放量估算值都显示在其成本旁边。这是一种…

AI:87-基于深度学习的街景图像地理位置识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

GWAS结果批量整理:升级版算法TidyGWAS

TidyGWAS GWAS分析关键结果之一是显著性SNP位点的P值&#xff0c;通常多年份多地点多模型的GWAS分析将会产生很多结果文件&#xff0c;如何对这些数据进行整理&#xff1f; 汇总这些结果&#xff0c;并将显著性的位点或区域找出来&#xff0c;更加清晰的展示关键信息。 今天介…

揭秘!SpireCV如何实现低延时推流、视频保存!

引言 视频推流是指将实时的音视频数据通过网络传输到服务器或其他终端设备的过程。 在无人机上则是通过搭载摄像头或录像设备&#xff0c;通过无线网络将实时拍摄到的视频数据传输到地面站或其他终端设备&#xff0c;使操作人员能够实时监视无人机所处位置的环境&#xff0c;…

Find My鼠标|苹果Find My技术与鼠标结合,智能防丢,全球定位

随着折叠屏、多屏幕、OLED 等新兴技术在个人计算机上的应用&#xff0c;产品更新换代大大加速&#xff0c;进一步推动了个人计算机需求的增长。根据 IDC 统计&#xff0c;2021 年全球 PC 市场出货量达到 3.49 亿台&#xff0c;同比增长 14.80%&#xff0c;随着个人计算机市场发…

qt实现播放视屏的时候,加载外挂字幕(.srt文件解析)

之前用qt写了一个在windows下播放视频的软件&#xff0c;具体介绍参见qt编写的视频播放器&#xff0c;windows下使用&#xff0c;精致小巧_GreenHandBruce的博客-CSDN博客 后来发现有些视频没有内嵌字幕&#xff0c;需要外挂字幕&#xff0c;这时候&#xff0c;我就想着把加载…

「首届广州百家新锐企业」名单出炉!数说故事遴选入围

11月20日&#xff0c;由中共广州市委统战部、市工商联、市工信局、市国资委、市科技局联合主办的首届广州百家新锐企业融通创新交流会在广州成功举办。 为推动广州市中小民营企业的创新发展&#xff0c;践行新发展理念&#xff0c;厚植广州产业根基&#xff0c;现场发布首届广…

云计算时代来临,传统运维怎样做才能不被“杀死”?

据Forrester Research的数据显示&#xff0c;2021年全球公有云基础设施市场将增长35%&#xff0c;达到1200亿美元&#xff0c;云计算将继续在疫情复苏的过程中“占据中心位置”。 全球用于云计算的IT支出占比将持续增长&#xff0c;企业对于云计算开发人才需求紧迫&#xff0c…

面向自然语言处理任务的预训练模型综述

源自&#xff1a;计算机应用 作者&#xff1a;刘睿珩&#xff0c; 叶霞&#xff0c; 岳增营 “人工智能技术与咨询” 发布 摘 要 近年来&#xff0c;深度学习技术得到了快速发展。在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;随着文本表征技术…

c语言新龟兔赛跑

以下是一个使用C语言编写的新的龟兔赛跑游戏&#xff1a; #include <stdio.h>#include <stdlib.h>#include <time.h>int main() { int distance, turtle_speed, rabbit_speed, turtle_time, rabbit_time, rabbit_lead; srand(time(NULL)); // 随机数种…

2024-NeuDS-数据库题目集

一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析&#xff1a;数据冗余是数据库中产生数据不一致的根本原因&#xff0c;因为当同一数据存储在多个位置时&#xff0c;如果其中一个位置的数据被修改&#xff0c;其他位置的数据就不一致了。因此&#xff0c;在数据…

Azure Machine Learning - 创建Azure AI搜索服务

目录 准备工作查找 Azure AI 搜索产品/服务选择订阅设置资源组为服务命名选择区域选择层创建服务配置身份验证扩展服务何时添加第二个服务将多个服务添加到订阅 Azure AI 搜索是用于将全文搜索体验添加到自定义应用的 Azure 资源&#xff0c;本文介绍如何创建Azure AI搜索服务 …

Python,FastAPI,mLB网关,无法访问/docs

根源就是js和ccs文件访问路由的问题&#xff0c;首先你要有本地的文件&#xff0c;详情看https://qq742971636.blog.csdn.net/article/details/134587010。 其次&#xff0c;你需要这么写&#xff1a; /unicontorlblip就是我配置的mLB网关路由。 app FastAPI(titleoutpaint…

做外贸的你崩溃过吗

某日&#xff0c;孔先生问我&#xff0c; 前几天的那个单子怎么样了&#xff1f;看你一会找工厂拍照片&#xff0c;一会找办公室录制视频&#xff0c;半夜还在拿着手机和客户打电话&#xff0c;现在怎么也不提这个进展了&#xff0c;我回答道&#xff1a;黄了。 此时孔先生一股…

短剧付费变现小程序源码系统+开通会员+在线充值 附带完整的搭建教程

大家好啊&#xff0c;今天小编来给大家分享一款短剧付费变现小程序源码系统。近年来&#xff0c;随着互联网技术的飞速发展&#xff0c;短剧成为了一个备受瞩目的领域。短剧以其简洁、紧凑的故事情节和制作周期短、传播速度快的特点&#xff0c;成为了越来越多人的选择。然而&a…