[C语言]和我一起来认识“整型在内存中的存储”

news2024/9/28 11:18:16

目录

1.整型类型中的成员

2.整型在内存中的存储

        2.1原码,反码,补码

        2.2整型在内存中以补码存放数据

         2.3大小端

                2.3.1大小端的介绍

                 2.3.2通过编程判别当前机器的字节序

1.整型类型中的成员

(unsigned为无符号类型,signed为有符号类型)

        1.char

                unsigned char

                signed char

        2.short

                unsigned short [int](int可以省略不写,以下相同)

                signed short [int]

        3.int

                unsigned int

                signed int

        4.long

                unsigned long [int]

                signed long [int]

        Q.整型有这么多分类,每一个类型还分无符号和有符号,那我们平时写的int,short,char到底是什么呢?

        A.我们平时所写的int,short,long都是有符号的,即分别为:signed int,signed short,signed long。而char则取决于寄存器的不同而不同,但绝大多数的char所代表的是signed char

        Q.char不是字符吗?为什么char会放入到整型类型中呢?

        A.这就和我们本文章所讲到的存储有关,char类型在内存中以ASCII值存储,ASCII值也是整数,所以归纳到整型分类中。

  

2.整型在内存中的存储

        一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的

        2.1原码,反码,补码

        计算机中的整数有三种2进制的表达方式,分别为原码,反码和补码。三种表示方法均有符号位数值位两部分组成,符号位用‘0’表示‘正数’,用‘1’表示‘负数’

        正数的原码,反码和补码均相同

        负数的三种表达方式均不相同

        原码:将整数以二进制的形式所转换,即为原码

//举例//
整数:-20
原码:10000000 00000000 00000000 00010100

        反码:将原码的符号位不变,其他位依次取反就可以得到反码

//举例//
整数:-20
原码:10000000 00000000 00000000 00010100
反码:11111111 11111111 11111111 11101011

        补码:将反码+1就可以得到补码

//举例//
整数:-20
原码:10000000 00000000 00000000 00010100
反码:11111111 11111111 11111111 11101011
补码:11111111 11111111 11111111 11101100(二进制位,满2进1)

        2.2整型在内存中以补码存放数据

        先让我们来看看在内存中的存储:

        以整数a = -20;来举例

a = -20
补码:11111111 11111111 11111111 11101100

        内存中的存储形式(以十六进制显示) 

        由以上的图我们可以知道,整数在内存中确实以补码的形式存储,而且我们发现了他顺序却有点不对劲,是和我们的补码顺序所相反的。

        这就引申到我们的下一小节,大小端的介绍了

       Q. 在此之前还有一个问题,为什么在计算机系统中一律以补码的形式存储呢?

        A.使用补码,可以将符号位和数值域统一处理。同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

 

         在计算机中,计算1 - 1其实是1 + (-1),因为CPU只有加法器,那么到底是怎么实现的呢?

        参照以下图,可以大概了解一下。

         2.3大小端

                2.3.1大小端的介绍

                大端(大端字节序)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。
                小端(小端字节序)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。

                对于一个整数的低位和高位区分:

        例如a = 123

        个位(低):3   十位:2    百位(高):1

        二进制:(高位)00000000 00000000 00000000 01111011(低位)

                        《———————————————————

         二进制从右边第一位开始为1*2^0 + 1*2^1来组成个位。显然,二进制从右边开始为低位到左边为高位

        (图片下方为小端字节序,不好意思打错字了)

        可以看到, 我目前的机器为小端字节序

 

 

 

                 2.3.2通过编程判别当前机器的字节序

        我们想要判别大小端,主要是看他字节序是低位放在低地址还是放在高地址来进行判别是小端还是大端。

        那我们该怎么只拿取他的第一个字节呢?

        先取地址,&a。但&a是四个字节,我们可以通过强制类型转换,使用char*类型(char*类型只占1个字节)就可以获取他的第一个字节了,再通过对第一个字节的判别来进行大小端的区分就可以咯【代码在下方】

#include <stdio.h>
int main()
{
	int a = 1;
	char* p = (char*)&a;
	if (*p == 1)
	{
		printf("小端字节序\n");
	}
	else
	{
		printf("大端字节序\n");
	}
	return 0;
}

        结合文章上的分析,结果是正确的。 

 

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

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

相关文章

【java集合】HashMap源码解析(基于JDK1.8)

一、Hashmap简介 类继承关系图如下&#xff1a; HashMap实现了三个接口&#xff0c;一个抽象类。主要的方法都在Map接口中&#xff0c;AbstractMap抽象类实现了Map方法中的公共方法&#xff0c;例如&#xff1a;size(),containsKey(),clear()等,主要方法由子类自己实现。 Ha…

Linux驱动之系统移植----uboot移植_修改网络驱动(uboot无设备树版本)

uboot版本:uboot.2016.03 开发板:100ask_imx6ull_pro 修改网络驱动 须知 I.MX6UL/ULL内部有个以太网 MAC外设&#xff0c;也就是 ENET&#xff0c;需要外接一个 PHY芯片来实现网络通信功能&#xff0c;也就是内部 MAC外部 PHY芯片的方案。(一个MAC可对应N个PHY芯片, PHY有地址…

5G NR标准 第11章 多天线传输

第11章 多天线传输 多天线传输是 NR 的关键组成部分&#xff0c;尤其是在较高频率下。 本章一般性地介绍了多天线传输的背景&#xff0c;然后详细描述了 NR 多天线预编码。 11.1 简介 使用多个天线进行传输和/或接收可以在移动通信系统中提供巨大的好处。 发射机和/或接收…

女友:不跟我解释清楚 Linux I/O 晚上你就睡沙发吧

目录阻塞 I/O非阻塞 I/OI/O复用信号驱动 I/O异步 I/O总结I/O 其实就是 input 和 output&#xff08;输入输出&#xff09; 在计算机操作系统中对应数据流的输入与输出&#xff0c;在 Linux 中&#xff0c;既有文件的 I/O&#xff0c;也有网络 I/O 无论是文件 I/O 还是网络 I/…

【大厂高频真题100题】《整数转罗马数字》 真题练习第21题 持续更新~

整数转罗马数字 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列…

【解决方案】智慧城管非现场执法系统

通过自建摄像头或利用辖区现有监控摄像头&#xff0c;利用人工智能技术&#xff0c;通过深度学习算法&#xff0c;系统能够全天候自动识别和采集城管违章行为&#xff0c;实现店外经营智能分析、无证游商智能分析、乱堆物堆料智能分析、暴露垃圾等场景的智能分析&#xff0c;从…

黄金分析师职级如何评定?初级、高级如何划分?

自从中国加入WTO以后&#xff0c;对外贸易和境外投资持续高速增长&#xff0c;为国家带来了了巨额外汇积累。发展黄金市场、提高黄金投资需求&#xff0c;成为我国应对国际金融风险显现和美元贬值的重要举措。然而&#xff0c;黄金投资市场健康、持续的发展&#xff0c;需要大量…

shell的模拟实现

目录 整体框架分析 代码演示 代码分析 整体框架分析 考虑下面这个与shell典型的互动&#xff1a; [xzyecs-333953 date16]$ ls makefile mycmd mycmd.cpp myexec myexec.c test.py [xzyecs-333953 date16]$ psPID TTY TIME CMD 21919 pts/0 00:00:00 bash …

jmeter之数据库配置及修改(工作日记3)

首先&#xff0c;jmeter要配置数据库需要安装 jdbc.jar包 官网连接&#xff1a;https://dev.mysql.com/downloads/ 步骤1&#xff1a; 步骤二&#xff1a; 步骤三&#xff1a; 步骤四&#xff1a; 接着我们去jmeter导入此jar包&#xff1a; 然后我们就可以在jmeter中去…

CSS3 多列布局

文章目录CSS3 多列布局概述常用属性使用column-count 列数column-width 列宽column-gap 间距column-rule 边框column-span 跨列案例瀑布流布局CSS3 多列布局 概述 在CSS3之前&#xff0c;如果想要设计类似报纸那样的多列布局&#xff0c;有两种方式可以实现&#xff1a;一种是…

kaggle平台学习复习笔记 | pandas

目录1.Creating, Reading and Writing2.Indexing, Selecting & Assigning3.Summary Functions and Maps4.Grouping and Sorting5.Data Types and Missing Values6.Renaming and Combining获得开展独立数据科学项目所需的技能。 1.Creating, Reading and Writing DataFram…

安全帽识别算法技术原理

应用背景&#xff1a;安全帽作为一种最常见和实用的个人防护用具&#xff0c;能够有效地防止和减轻外来危险源对头部的伤害。但在现场操作过程中&#xff0c;安全帽的佩戴很容易人为忽略&#xff0c;引发了不少人身伤害事故。为了保证工作人员都能在作业中佩戴安全帽&#xff0…

CentOS/Red Hat 安装cuDNN

创建于&#xff1a;2023.01.04 修改于&#xff1a;2023.01.04 文章目录1、找到cuDNN版本号2、下载cuDNN3、安装cuDNN4、参考资料本文是在Linux Red Hat下安装的cuDNN&#xff0c;且假定您已经安装好了NVIDIA驱动、CUDA。 本文是在CUDA 11.2 Red Hat条件下安装的cuDNN。 1、找…

超高清直播“出圈”下的沉浸式文博会

在引领文化产业发展的文博会现场&#xff0c;前沿科技元素随处可见。VR、AR、4K/8K、元宇宙……各种“文化科技”的元素以刷新视听极限的美好体验&#xff0c;冲击着观众的眼球和感知。文博会现场&#xff0c;BOSMA博冠于数字文化展区展示国产8K超高清摄像机、BOSMA博冠望远镜等…

(小甲鱼python)集合笔记合集一 集合(上)总结 集合的简单用法 集合的各种方法合集:子、交、并、补、差、对称差集、超集

一、基础复习 集合与字典区别 集合中所有元素都是独一无二的&#xff0c;并且也是无序的。 集合具有唯一性、无序性、有限性 >>> type({}) #字典 <class dict> >>> type({"one"}) #集合 <class set> >>> type…

微服务保护 Sentinel 实战

目录Sentinel什么是雪崩问题&#xff1f;服务保护技术对比Sentinel介绍和安装初识Sentinel安装Sentinel微服务整合Sentinel流量控制簇点链路快速入门流控模式关联模式链路模式流控效果warm up排队等待热点参数限流全局参数限流热点参数限流案例隔离和降级FeignClient整合Sentin…

nVisual各项隐藏项配置说明

nVisual可以部署在不同的项目中&#xff0c;但是每个项目都有自己不同的使用场景&#xff0c;有的不需要报表功能&#xff0c;有的不需要监测功能&#xff0c;还有的不需要连接外网的功能等。针对这些不同的需求&#xff0c;有必要且有可使用的机制来满足这些场景。 nVisual使…

PageRank算法

什么是PageRank&#xff1f; PageRankPageRankPageRank算法由GoogleGoogleGoogle创始人LarryPageLarry\ PageLarry Page在斯坦福大学时提出&#xff0c;又称PRPRPR&#xff0c;佩奇排名。主要针对网页进行排名&#xff0c;计算网站的重要性优化搜索引擎的搜索结果。PRPRPR值表示…

Java大学生档案系统高校学生档案系统

简介 Java基于springboot开发的学生档案系统&#xff0c;包含了权限管理&#xff0c;学生档案&#xff0c;学生成绩录入&#xff0c;教师管理等。 演示视频 https://www.bilibili.com/video/BV1XV411b761/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92…

SQL速算N日留存

之前才哥发布了《用SQL进行用户留存率计算》 链接&#xff1a;https://mp.weixin.qq.com/s/QJ8JUO00bVJe_K6sx_ttaw 简化数据后得到如下结构的数据&#xff1a; 由于用户和登录日期被设置为主键所以不需要再进行去重&#xff0c;下面看看如何快速求七日留存。 数据下载地址&…