“第五十八天”

这里c语言的强制类型转换,大小端的问题在之前C语言中都提过了。

这里之前提过的边界对齐在补一点东西。

        现代计算机通常是按字节编址,即每个字节对应一个地址;通常也支持按字、按半字、按字节寻址;  之前提过,字和字节的不同,1 字节是8bit,而 一个字 和存储字长有关,若存储字长为32位,则1个字为 32bit。这里为什么采用边界对齐的方式存储在C语言中结构体的那一部分也已经提过,为了方便读取,以空间换时间的方式。

这里还有一个将按字寻址和按半字寻址转换成按字节寻址的方法,前置逻辑左移两位,后者逻辑左移一位即可。

        存储系统的基本概念

存储器的层次化结构

外存(磁带,光盘)-> 辅存 (磁盘)-> 内存(主存)-> 高速缓冲存储器(cache)-> cpu

从前到后(前 -> 后),运算速度越来越快,容量越来越小,价格越来越高;

辅存中的数据只有调入主存后,才能被CPU访问,主存和cache是可以直接被cpu读写的。

数据在辅存和主存的传输是通过 硬件+操作系统实现的;主存,cache,cpu三者之间数据传输是通过硬件自动完成的。

主存 - 辅存:实现了虚拟存储系统,解决了主存容量不够的问题。

cahce - 主存:解决了主存和cpu速度不匹配的问题。

存储器按存取方式可以分为

随机存取存储器

读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关。

顺序存取存储器

读写一个存储单元所需时间取决于存储单元所在的物理位置。

直接存取存储器

既有随机存取的特性,也有顺序存取特性。直接选取信息所在区域,然后按顺序方式存取。

像顺序存取存储器和直接存取存储器这种读写某一存储单元所需时间与存储单元的物理位置有关的存储器也叫做串行访问存储器

相联存储器

可以按内容访问的存储器,可以按内容检索到存储位置进行读写,“快表“就是一种相联存储器。

按信息的可更改性

读写存储器:(Read/Write Memory)

即可读,也可写;

只读存储器:(Read Only Memory)

只能读,不能写。(实际上很多ROM也可以多次读写,只是比较麻烦)

按信息的可保存性;

断电后,存储信息消失的存储器 -- 易失性存储器(主存,cache)

断电后,存储信息依然保持的存储器 -- 非易失性存储器(磁盘,光盘)

信息读出后,原存储信息被破环 -- 破坏性读出(如DRAM芯片,读出数据后要进行重写)

信息读出后,原存储信息不被破坏 -- 非破坏性读出(如SRAM芯片,磁盘,光盘)

        存储器的性能指标

1、存储容量:存储字数*字长;

2、单位成本:每位价格 = 总成本/总容量 (总容量的单位是bit,位)。

3、存储速度:数据传输率 = 数据的宽度 / 存储周期 (数据的宽度即存储字长)

1)、存取时间:存取时间是指从启动一次存储器操作到完成该操作所经历的时间, 分为读出时间和写入时间。

2)、存期周期:存期周期又称位读写周期或访问周期,它是指存储器进行一次完整的读写操作所需的全部时间(包括存取之后的恢复时间),即连续两次独立的访问存储器操作之间所需要的最小时间间隔。

主存带宽:主存带宽又称为数据传输率,表示每秒从主存进出信息的最大数量,单位为 字/秒,字节/秒 或 位/秒。

        主存储器的基本组成:

基本的半导体元件及原理:

像这个MOS管控制着电路是否接通,当电路接通之后,电容就会和数据线的另一端导通,通过电容本身电压的高低 (高电压表示 1 ,低电压表示 0)可以完成数据 1/0 的读取,同时也可以通过数据线对电容充放电完成 1 /0 的写入。(这些都是在 MOS管导通情况下完成的,MOS管相当于电路开关。)

这个每八个半导体元件构成一个存储单元(一个半导体代表一位,也就是一字节),然后每一个地址控制着一字节的大小。之前提过MAR是存储地址寄存器,cpu通过地址总线向MAR传输地址,然后通过译码器就可以根据地址找到对应的字选线,字选线可以控制MOS管是否导通,从而决定半导体和数据总线之间是否导通,决定数据总线是否能够进行读写。

这里还有一个控制电路,在后面会有比较详细的解释。

由于一个内容条中可能包含多块存储芯片,片选线就是决定读取哪一块存储芯片的。

还有一个总容量,总容量和上面说的存储容量应该是一样的,只不过表示有点区别,总容量是存储单元个数*存储字长 ,存储容量是存储字数*字长,存储字数就是可以有多少地址,有多少地址也就可以管多少存储单元,所有两者应该一样。

 这个题我最开始是打算引入一个变量来观测a,b是否循环一个周期了,这样虽然能做但还是比较麻烦的,但后面突然意识到可以通过模求余来表示第几次出拳,这样感觉就比较巧,如果a的出拳周期是3 ,那么0,3,6的模3余都是0,都表示第一次,然会 1,4,7都余1表示第二次,这样不用借助变量,而且处理起来也算方便。

#include<stdlib.h>

int main()
{
	int n = 0, a = 0, b = 0;
	scanf("%d %d %d", &n, &a, &b);

	int* _a = (int*)malloc(sizeof(int) * a);
	int* _b = (int*)malloc(sizeof(int) * b);

	int i = 0; int suma = 0, sumb = 0; int ja = -1, jb = -1;

 	for (i = 0; i < a; i++)
	{
		scanf("%d", &_a[i]);
	}

	for (i = 0; i < b; i++)
	{
		scanf("%d", &_b[i]);

		ja++;

		if ((_b[i] == 5 && _a[ja] == 0) || (_b[i] == 2 && _a[ja] == 5) || (_b[i] == 0 && _a[ja] == 2))
			sumb++;
		else if ((_b[i] == 0 && _a[ja] == 5) || (_b[i] == 5 && _a[ja] == 2) || (_b[i] == 2 && _a[ja] == 0))
			suma++;

		if (ja == a - 1) ja = -1;

		n--;
	}
	for (i = 0; i < n; i++)
	{
		ja++; jb++;

		if ((_b[jb] == 5 && _a[ja] == 0) || (_b[jb] == 2 && _a[ja] == 5) || (_b[jb] == 0 && _a[ja] == 2))
			sumb++;
		else if ((_b[jb] == 0 && _a[ja] == 5) || (_b[jb] == 5 && _a[ja] == 2) || (_b[jb] == 2 && _a[ja] == 0))
			suma++;

		if (jb == b - 1) jb = -1;
		if (ja == a - 1) ja = -1;
		
	}

	if (suma > sumb)
		printf("A\n");
	else if (sumb > suma)
		printf("B\n");
	else
		printf("draw\n");
	return 0;
}

这个是用 模求余处理的

#include<stdlib.h>

int main()
{
	int n = 0, a = 0, b = 0;
	scanf("%d %d %d", &n, &a, &b);

	int* _a = (int*)malloc(sizeof(int) * a);
	int* _b = (int*)malloc(sizeof(int) * b);

	int i = 0; int suma = 0, sumb = 0; 

 	for (i = 0; i < a; i++)
	{
		scanf("%d", &_a[i]);
	}
	for (i = 0; i < b; i++)
	{
		scanf("%d", &_b[i]);
	}

	for (i = 0; i < n; i++)
	{
		if ((_b[i%b] == 5 && _a[i%a] == 0) || (_b[i % b] == 2 && _a[i % a] == 5) || (_b[i % b] == 0 && _a[i % a] == 2))
			sumb++;
		else if ((_b[i % b] == 0 && _a[i % a] == 5) || (_b[i % b] == 5 && _a[i % a] == 2) || (_b[i % b] == 2 && _a[i % a] == 0))
			suma++;
	}

	if (suma > sumb)
		printf("A\n");
	else if (sumb > suma)
		printf("B\n");
	else
		printf("draw\n");
	return 0;
}

还有个题,错误一直找不到了,今天就不发了。

突然明白了,我是把头对齐运算的,加减应该是把尾对齐。

t

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

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

相关文章

基于单片机设计的电子柜锁

一、前言 随着现代社会的不断发展&#xff0c;电子柜锁的应用越来越广泛。传统的机械柜锁存在一些不便之处&#xff0c;例如钥匙容易丢失、密码容易泄露等问题。设计一款基于单片机的电子柜锁系统成为了一个有趣而有意义的项目。 该电子柜锁系统通过电磁锁作为柜锁的开关&…

ViT Vision Transformer超详细解析,网络构建,可视化,数据预处理,全流程实例教程

关于ViT的分析和教程&#xff0c;网上又虚又空的东西比较多&#xff0c;本文通过一个实例&#xff0c;将ViT全解析。 包括三部分内容&#xff0c;网络构建&#xff1b;orchview.draw_graph 将网络每一层的结构与输入输出可视化&#xff1b;数据预处理。附完整代码 网络构建 …

通过USM(U盘魔术大师)在PE环境下使用分区助手拷贝磁盘——无损升级硬盘

这里写自定义目录标题 背景本次使用技术步骤1、添加新硬盘2、添加PE3、开机进入BIOS&#xff0c;进入PE4、开始拷贝磁盘5、调整分区5.1 删除系统盘前的所有分区5.2 修改硬盘分区表格式为GUID5.3 新建引导分区 6、修复引导7、大功告成 背景 由于硬盘空间不够的时候就需要更换硬盘…

桥接模式birdge

简介 桥接模式&#xff1a;将抽象与实现相分离&#xff0c;使他们可以独立变化。 角色 抽象化&#xff08;Abstraction&#xff09;角色&#xff1a; 该类持有一个对实现角色的引用&#xff0c;抽象角色中的方法需要实现角色来实现&#xff0c;抽象角色一般为抽象类&#xf…

0基础学习PyFlink——个数滚动窗口(Tumbling Count Windows)

大纲 Tumbling Count WindowsmapreduceWindow Size为2Window Size为3Window Size为4Window Size为5Window Size为6 完整代码参考资料 之前的案例中&#xff0c;我们的Source都是确定内容的数据。而Flink是可以处理流式&#xff08;Streaming&#xff09;数据的&#xff0c;就是…

每日自动化提交git

目前这个功能&#xff0c;有个前提&#xff1a; 这个git代码仓库&#xff0c;是一个人负责&#xff0c;所以不存在冲突问题 我这个仓库地址下载后的本地路径是&#xff1a;D:\Projects\Tasks 然后我在另外一个地方新建了一个bat文件&#xff1a; bat文件所在目录为&#xff1a…

LeetCode----124. 二叉树中的最大路径和

题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 示…

【实战Flask API项目指南】之二 Flask基础知识

实战Flask API项目指南之 Flask基础知识 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界&…

【OpenCV实现图像找到轮廓的不同特征,就像面积,周长,质心,边界框等等。】

文章目录 概要图像矩凸包边界矩形 概要 OpenCV是一个流行的计算机视觉库&#xff0c;它提供了许多图像处理和分析功能&#xff0c;其中包括查找图像中物体的轮廓。通过查找轮廓&#xff0c;可以提取许多有用的特征&#xff0c;如面积、周长、质心、边界框等。 以下是几种使用…

GD32F303RCT6不小心将读保护开启,导致后续程序烧不进去的解决办法

这里写自定义目录标题 错误现象判断读保护开启的方法用JLink-commander查看选项字节地址处的值 解锁读保护 错误现象 用j-flash v7.68b软件通过ARM仿真器设置接口为SWD烧录编译好的目标.bin文件&#xff0c;第一次烧录成功&#xff0c;后面再也烧录不进&#xff0c;出先现象 如…

Hadoop相关知识点

文章目录 一、主要命令二、配置虚拟机2.1 设置静态ip2.2 修改主机名及映射2.3 修改映射2.4 单机模式2.5 伪分布式2.6 完全分布式 三、初识Hadoop四、三种模式的区别4.1、单机模式与伪分布式模式的区别4.2、特点4.3、配置文件的差异4.3.1、单机模式4.3.2、伪分布式模式4.3.3、完…

基于nodejs+vue客户管理管理系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

智慧公厕:科技赋予公共卫生新生命,提升城市管理品质

在现代化城市中&#xff0c;公共卫生设施的发展与提升一直是对城市管理者和市民的共同期望。然而&#xff0c;传统的公共厕所常常令人困扰&#xff0c;脏乱臭成为难题。为了解决这一难题&#xff0c;广州中期科技科技有限公司全新升级的智慧公厕整体解决方案&#xff0c;补誉为…

SpringBoot3.* 集成又拍云上传组件

集成使用 添加Maven依赖 <!--又拍云--> <dependency><groupId>com.upyun</groupId><artifactId>java-sdk</artifactId><version>4.2.3</version> </dependency>代码编写 PostMapping("/common/upload") pu…

MySQL 优化思路篇

MySQL 优化思路篇 1、MySQL 查询的优化步骤2、查询系统性能参数3、慢查询日志定位问题3.1、开启慢查询日志参数3.2、查看慢查询数目3.3、慢查询日志的分析工具 mysqldumpslow3.4、关闭慢查询日志3.5、慢查询日志的删除与重建 4、SHOW PROFILE &#xff1a;查看SQL执行成本 1、…

React基础知识02

一、通过属性来传值&#xff08;props&#xff09; react中可以使用属性&#xff08;props&#xff09;可以传递给子组件&#xff0c;子组件可以使用这些属性值来控制其行为和呈现输出。 例子&#xff1a; // 1.1 父组件 import React, { useState } from react // 1.2引入子…

测试老鸟,Python接口自动化测试框架搭建-全过程,看这篇就够了...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口测试自动化…

Django实战项目-学习任务系统-查询列表分页显示

接着上期代码框架&#xff0c;6个主要功能基本实现&#xff0c;剩下的就是细节点的完善优化了。 接着优化查询列表分页显示功能&#xff0c;有很多菜单功能都有查询列表显示页面情况&#xff0c;如果数据量多&#xff0c;不分页显示的话&#xff0c;页面展示效果就不太好。 本…

Centos虚拟机安装配置与MobaXterm工具及Linux常用命令

目录 一、Centos操作系统 1.1 Centos介绍 1.2 Centos虚拟机安装 1.3 配置centos的镜像 1.4 虚拟机开机初始设置 1.4.1 查看网络配置 1.4.2 编辑网络配置 二、MobaXterm工具 2.1 MobaXterm介绍 2.2 MobaXterm安装 2.3 切换国内源 三、Linux常用命令和模式 3.1 查看网络配置 …

前端工程师的摸鱼日常(20)

今年一整年状态都不怎么好&#xff0c;所以别说摸鱼文了&#xff0c;其他技术文章都没写几篇&#xff0c;发生的事情有点多&#xff0c;无暇顾及这些&#xff0c;当然最主要的一个原因还是因为懒&#xff01; 有很多时候我都觉得人的大脑是单线程的&#xff0c;在处理一件事情…