计算机系统基础实验 - 数的机器级表示

news2025/4/12 12:10:03

实验1 数的机器级表示

实验序号:1 实验名称:数的机器级表示
适用专业:软件工程 学时数:2学时

一、实验目的

1.熟练掌握无符号整数的机器级表示
2.熟练掌握有符号整数的机器级表示
3.熟练掌握浮点数的机器级表示

二、实验要求

按照实验题目的要求,编写程序并上机调试

三、实验设备、环境

计算机、Windows 7 、Visual C++ 6.0

四、实验步骤及内容

用C语言编写程序模拟32位机器数到真值的转换,在main中定义
char binary[33];
1.编写无符号数的转换:

unsigned int unsignedToValue(char binary[],int n);

要求在main中从屏幕读入32个二进制数即0或者是1,调用unsignedToValue函数返回此二进制数代表的无符号数的真值。
2.编写有符号数的转换:

int intToValue(char binary[],int n);

要求在main中从屏幕读入32个二进制数即0或者是1,调用intToValue函数返回此二进制数代表的有符号数的真值。
3.编写单精度浮点数的转换:

float floatToValue(char binary[],int n);

要求在main中从屏幕读入32个二进制数即0或者是1,调用intToValue函数返回此二进制数代表的浮点数的真值,要求能够输出非规格化数:无穷大,0,非数。

提示:

  1. 在测试时,连续输入32个0、1,不要在中间加入空格或者换行符
  2. 可以尝试将字符型的0和1转换成整型的0和1,方便判断和计算
  3. 注意有符号整数为正数的时候计算方式同无符号整数,因此可以通过调用无符号整数函数来简化代码
  4. 注意到计算阶实际上就是计算无符号整数
  5. 计算浮点数的时候应该先判定是否为非规格化数,如果判定成功就可以直接输出结果。

五、讨论、思考题

1、IEEE754标准的浮点数好处在哪里?

1.尾数可表示的位数多了一位,因而使浮点数的精度更高;
2.阶码的可表示范围更大,因而使浮点数范围更大。

代码

#include<stdio.h>

void removeBlank(char *str) {
    char *tmp = str;
    int i, j = 0;
    for (i = 0; str[i] != '\0'; i++) {
        if (str[i] != ' ')
            tmp[j++] = str[i];
    }
    tmp[j] = '\0';
    str = tmp;
}

unsigned int unsignedToValue(char binary[],int n) {
    unsigned int res = 0;
    for(int i = 0; i < n; i++) {
        res = res + ((binary[i] - '0') << (n - 1 - i));
    }
    return res;
}

int intToValue(char binary[],int n) {
    char tmp[32] = {'0'}; 
    if(binary[0]=='1') {
        for(int i = 1; i < n; i++) {
            tmp[i] = binary[i]^1;
        }
        if(tmp[n-1] == '1'){ 
            for (int i = 30; i > -1 ; i --) {
                tmp[i] ^= 1;
                if(tmp[i] == '1') break;
            }
        }
        tmp[n-1] ^= 1;
        return -(int)unsignedToValue(tmp,n);;
    } else {
        return (int)unsignedToValue(binary,n);
    }
}

float floatToValue(char binary[],int n) {
    int E;
    float res = 0,M = 0;
    int sign = (binary[0] == '1') ? -1 : 1;
    E = (int) unsignedToValue(binary+1,8) - 127;
    if(E >= 0) {
        for(int i = 9; i < 32; i++) {
            M = M + ((binary[i]-'0')<<(E))/(float)(1<<(i-8));
        }
        res = (M + (1<<E)) * sign;
    }
    else {
        for(int i = 9; i < 32; i++) {
            M = M + ((binary[i]-'0')*1.0/(float)(1<<(-E)))/((float)(1<<(i-8)));
        }
        res = (M + (1/(1<<(-E)))) * sign;
    }
    if((E==128)&&(M==0)) {
        return (1.0/0.0);
    }
    if((E==128)&&(M!=0)) {
        return (0.0/0.0);
    }
    if((E==-127)&&(M!=0)) {
        printf("denorms\n");
        return 0;
    }
    return res;
}

int main(){
    char binary[39];
    gets(binary);
    removeBlank(binary);
    printf("无符号整数:%u\n", unsignedToValue(binary,32));
    printf("带符号整数:%d\n", intToValue(binary,32));
    printf("浮点数:%f\n", floatToValue(binary,32));
    return 0;
}

测试

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

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

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

相关文章

WORDPRESS WOOCOMMERCE购物网站安装AB跳转支付插件接口的教程

本文介绍在Wordpress Woocommerce购物系统上安装支付插件&#xff0c;并且对接《品牌出海AB跳转收单系统》的方法&#xff0c;以下是图文教程 注意本教程是采用Wordoress中文版本后台截取的图例&#xff0c;英文版本后台文字略有不同&#xff1b; 1、首先打开支付插件压缩包&…

反编译python 生成的exe源码

反编译python 生成的exe源码记录反编译exe工具使用 工具准备 – pyinstxtractor.py – uncompyle6 – sublime Text&#xff08;或者其他的二进制编辑工具&#xff09; 一、解包&#xff08;exe&#xff09; ①&#xff1a;先把下载的pyinstxtractor.py文件和需要进行反编译的…

π120M60代替ADuM2210SRIZ 双通道数字隔离器 电路简单速度快

π120M60代替ADuM2210SRIZ 双通道数字隔离器 电路简单速度快。具有出色的性能特征和可靠性&#xff0c;整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立&#xff0c;可实现多种传输方向的配置&#xff0c;可实现 5.0kV rms 隔离耐压等级和 DC 到 10Mbps 信…

下载和安装MySQL官方提供的示例数据库(Employees)

一、前言 在此之前笔者写过一篇博客《你说精通MySQL其实很菜jī&#xff08;1&#xff09;&#xff1a;你不一定会的基本技巧或知识点&#xff08;值得一看&#xff09;》&#xff0c;本文内容是从那篇博客截取出来的。我们要学习MySQL相关的技术点&#xff0c;使用官方提供的测…

构造HTTP请求

构造HTTP请求一、浏览器自己构造二、通过 form 表单构造三、通过 ajax 构造一、浏览器自己构造 1&#xff09;地址栏里写URL&#xff0c;构造出GET请求 2&#xff09;点击a标签等&#xff0c;也会构造GET请求 3&#xff09;img、link、script也会构造GET请求 二、通过 form 表…

Java中的常用队列

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;Java中的常用队列 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪闪…

【Django】第二课 基于Django图书借阅管理网站平台

概念 本文在上一篇文章之上完成登录&#xff0c;图书显示&#xff0c;关键字搜索以及分页功能 登录功能实现 当用户在首页进行输入学生用户信息后&#xff0c;点击登录按钮发送请求给服务器&#xff0c;地址请求为: /toLogin/ urls.py path(toLogin/,views.toLogin), 将接…

ArcGIS基础实验操作100例--实验3旋转矢量要素

实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验3 旋转矢量要素 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&#xff09;加载【旋转】工具 &#xff08;2&#xff09;旋转矢量要素 一…

灵龟八法推算

很久之前就对这个算法感兴趣了&#xff0c;但是一直没搞定&#xff0c;网上公说公的&#xff0c;婆说婆的&#xff0c;搞得你头晕眼睛花&#xff0c;最后东拼西凑研究了好久才研究出来,在这里给大家分享。 第一步&#xff0c;掏出你的老黄历&#xff0c;如果你没有老黄历问题不…

BUUCTF Misc 弱口令 [RoarCTF2019]黄金6年 小易的U盘 [WUSTCTF2020]alison_likes

目录 弱口令 [RoarCTF2019]黄金6年 小易的U盘 [WUSTCTF2020]alison_likes 弱口令 下载文件 一个压缩包&#xff0c;需要密码&#xff0c;爆破了一会没出结果&#xff0c;百度了一下竟然有提示 蓝色内容复制到sublime查看&#xff08;记事本也不能看&#xff09; 摩斯密码&…

vue-cli2配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)

vue-cli区分办法 vue配置生产环境.env.production、测试环境.env.development vue配置webpack生产环境、测试环境 在使用webpack创建完vue2项目的时候&#xff0c;为了解决生产打包、测试打包对应的全局变量不一致的问题。 首先看一下package.json的改动&#xff1a; "…

【Git】一文带你入门Git分布式版本控制系统(创建版本库、 版本回退)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

改变您对Fedora的印象

导读我是 Fedora 的老用户了&#xff0c;从四年前接触嵌入式 Linux 开始&#xff0c;Fedora 就是我的桌面操作系统&#xff0c;期间从未被其他操作系统替代过&#xff0c;偶尔尝试也会第二天就装回来。用得愈久愈是喜欢&#xff0c;简洁、漂亮、稳定&#xff0c;无一不击中我&a…

OpenGL学习(基础光照)

这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个分量组成&#xff1a;环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照 环境光照 全局照明(Global Illumination)算法&#xff0c;但是…

吴恩达《机器学习》——线性回归代码实现

线性回归1. 单变量线性回归单变量线性回归公式损失函数优化算法——批梯度下降&#xff08;BGD&#xff09;2. 多变量线性回归特征缩放&#xff08;标准化&#xff09;参数的逆缩放3. 线性回归算法代码实现向量实现Python代码4. 实验结果单变量回归多变量回归实验总结数据集、源…

使用C#开发Word VSTO外接程序示例

目标&#xff1a;实现类似word中导航栏视图的功能。 创建新项目&#xff0c;选择模板“Word VSTO 外接程序”。选择工程&#xff0c;新建项目---新建功能区&#xff08;可视化设计器&#xff09;双击打开新建的可视化编辑器&#xff0c;编辑容器RibbonGroup在容器RibbonGroup里…

ReactJS入门之Model层

目录 一&#xff1a;分层 二&#xff1a;使用DVA进行数据分层管理 三&#xff1a;在model中请求数据 四&#xff1a;mock数据 一&#xff1a;分层 上图中&#xff0c;左侧是服务端代码的层次结构&#xff0c;由Controller、Service、Data Access 三层组成服务端系统&#…

Docker图文 | Docker、Dockerfile、Docker-compose、Docker镜像仓库操作 | 系统性学习 | 无知的我费曼笔记

Dokcer和Linux一样都是一些死命令&#xff0c;不必花费过多的时间去学习。 也不必花费过多时间专项地记忆&#xff0c;在实际运用中随用随取即可。 还不如将省下来的时间更多地花费在于培养思维上。 文章目录Docker1.初识Docker1.1.Docker意义1.1.1.应用部署的环境问题描述1.1…

Antd UI Switch组件 中 checked与defaultChecked踩坑记录

目录 需求分析 问题发现 解决方法 总结 需求分析 需求其实很简单&#xff0c;就是在对应的表格行内添加一个人switch 滑块&#xff0c;用于开启或关闭单点登录入口。只需要修改一下对应的表格&#xff0c;添加一个滑块组件&#xff0c;新增一个接口。于是菜鸡博主&#xf…

MySQL库的基本操作与数据库的备份

目录 1、什么是数据库 2、数据库的基本使用 <1>本地连接服务器 <2>创建数据库 <3>创建数据库实例 <4>字符集和校验规则 3、操纵数据库 <1> 查看数据库 <2> 显示创建语句 <3> 修改数据库 <4> 数据库删除 <5>…