CSAPP第二章课后作业题

2023-10-26

#include<stdio.h>

typedef unsigned char* byte_pointer;

int is_little_endian()
{
    int test_num = 0xff;
    byte_pointer byte_start = (byte_pointer) &test_num;

    printf("%d\n", sizeof test_num);        // 4
    printf("%d\n", sizeof byte_start[0]);   // 1

    printf("%x\n", byte_start[0]);          // ff
    printf("%x\n", byte_start[1]);          // 0
    printf("%x\n", byte_start[2]);          // 0
    printf("%x\n", byte_start[3]);          // 0

    if (byte_start[0] == 0xff) return 1;
    return 0;
}

int main()
{
    if (is_little_endian() == 1) printf("little_endian\n");  // 输出此语句
    else printf("big endian\n");
    return 0;
}

#include <stdio.h>
#include <assert.h>

// x的任何位都等于1
int A(int x)
{
    return !~x;
}

// x的任何位都等于0
int B(int x)
{
    return !x;
}

// x的最低有效字节中的位都等于1
int C(int x)
{
    return A(x | ~0xff);
}

// x的最高有效字节中的位都等于0
int D(int x)
{
    return B(x >> ((sizeof(int) - 1) << 3));
}

int main()
{
    int all_bit_one = ~0;
    int all_bit_zero = 0;

    printf("%x\n", all_bit_one);    // ffffffff
    printf("%x\n", all_bit_zero);   // 0

    assert(A(all_bit_one));
    assert(B(all_bit_zero));
    assert(C(all_bit_one));
    assert(D(all_bit_zero));

    printf("pass all assert\n");    // 程序最终输出该语句
    return 0;
}

#include <stdio.h>
#include <assert.h>

// K = 17
int A(int x)
{
    return (x << 4) + x;
}

// K = -7
int B(int x)
{
    return x - (x << 3);
}

// K = 60
int C(int x)
{
    return (x << 6) - (x << 2);
}

// K = -112
int D(int x)
{
    return (x << 4) - (x << 7);
}

int main()
{
    int x = 1958;
    assert(A(x) == 17 * x);
    assert(B(x) == -7 * x);
    assert(C(x) == 60 * x);
    assert(D(x) == -112 * x);

    printf("all assert passed");    // 程序最终输出这条语句
    return 0;
}

#include <stdio.h>
#include <assert.h>

unsigned f2u(float x)
{
    return *(unsigned*) &x;
}

int float_le(float x, float y)
{
    unsigned ux = f2u(x);
    unsigned uy = f2u(y);

    // get the sign bits
    unsigned sx = ux >> 31;
    unsigned sy = uy >> 31;

    return (ux << 1 == 0 && uy << 1 == 0) || // both zeros
            (sx && !sy) || // x < 0, y >= 0 or x <= 0, y > 0
            (!sx && !sy && ux <= uy) || // x > 0, y >= 0 or x >= 0, y > 0
            (sx && sy && ux >= uy);     // x < 0, y <= 0 or x <= 0, y < 0
}

int main()
{
    assert(float_le(-0, +0));
    assert(float_le(+0, -0));
    assert(float_le(0, 7));
    assert(float_le(-6, 0));
    assert(float_le(-5, 5));
    
    printf("all assert passed\n");
    return 0;
}

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <time.h>

int A(int x, double dx)
{
    return (float)x == (float)dx;
}

int B(int x, double dx, int y, double dy)
{
    return dx - dy == (double)(x - y);
}

int C(double dx, double dy, double dz)
{
    return (dx + dy) + dz == dx + (dy + dz);
}

int D(double dx, double dy, double dz)
{
    return (dx * dy) * dz == dx * (dy * dz);
}

int E(double dx, double dz)
{
    return dx / dx == dz / dz;
}

int main()
{
    srand((unsigned)time(NULL));
    int x = rand();
    int y = rand();
    int z = rand();
    double dx = (double)x;
    double dy = (double)y;
    double dz = (double)z;

    printf("%d %d %d\n", x, y, z);

    assert(A(x, dx));
    printf("A passed\n");
    assert(!B(0, (double)0, INT_MIN, (double)INT_MIN));
    printf("B passed\n");
    assert(C(dx, dy, dz));
    printf("C passed\n");
    // 第一个数2^30+1, 第二个数2^23+1, 第三个数2^24+1
    assert(!D((double)0x40000001, (double)0x800001, (double)0x1000001));
    printf("D passed\n");
    assert(!E(dx, (double)0));
    printf("E passed\n");

    return 0;
}

A: 0x40490FDB
0 10000000 10010010000111111011011

0b11.0010010000111111011011


B: 22/7的二进制小数表示
0b11.001001(001)...

C:从第9位开始不同

注:以上为中科大软件学院《深入理解计算机系统》课程布置的课后作业题,老师每一章都会挑一部分题留做作业。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSAPP第二章课后作业题 的相关文章

  • Unity3D StartCoroutine 调用一个函数,该函数什么时候返回?

    我知道Unity3D StartCoroutine调用了一个与StartCoroutine在同一线程上运行的函数 但是被调用的函数什么时候返回到原始调用者 我在互联网上查找了一个很好的 Unity3D Coroutine 示例 但找不到完整
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • Android NDK C++“wstring”支持

    我有用 C 编写的源代码 lib 现在我想在 Android NDK 项目 NDK 6 中编译并使用相同的源代码 lib 我能够编译大多数 C 文件 除了基于 std wstring 的功能 在 Application mk 中 当我指定时
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 在运行时设置 DataGridView 上的 DataFormatString?

    是否可以在运行时设置 ASP NET DataGridView 中的列或单元格的 DataFormatString 属性 这应该有效 BoundField priceField grid Columns 0 as BoundField pr
  • 如何在 Windows 窗体中运行屏幕保护程序作为其背景?

    如何在 Windows 窗体中运行屏幕保护程序作为其背景 用户还可以在屏幕保护程序运行时与表单控件进行交互 为什么这个 我们有一个案例 需要在用户时运行 Windows Bubbles 屏幕保护程序 可以继续与表单控件交互吗 您可以使用以下
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • C# 中处理 SQL 死锁的模式?

    我正在用 C 编写一个访问 SQL Server 2005 数据库的应用程序 该应用程序是数据库密集型的 即使我尝试优化所有访问 设置适当的索引等 我预计迟早会遇到死锁 我知道为什么会发生数据库死锁 但我怀疑我能否在某个时候发布不发生死锁的
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • 将一个 long 转换为两个 int 以进行重构

    我需要将一个参数作为两个 int 参数传递给 Telerik Report 因为它不能接受长参数 将 long 拆分为两个 int 并在不丢失数据的情况下重建它的最简单方法是什么 使用掩蔽和移位是最好的选择 根据文档 long 保证为 64
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标

随机推荐

  • Python之列表(list)基础知识点

    文章目录 1 创建列表 1 1 使用基本语法 创建 1 2 基于list 创建 1 3 range 创建整数列表 1 4 推导式生成列表 2 增加元素 2 1 append 方法 2 2 列表相加 2 3 extend 方法 2 4 ins
  • 共享本地文件夹

    ps 需要传输比较大的文件夹时 可以使用此方法 访问本地地址 直接进行下载 1 需要访问的那台电脑需要先安转node js https nodejs org en 2 进入终端安装本地服务http server 运行指令 npm insta
  • 自动驾驶汽车运动规划技术回顾——PDF版本

    英文 A Review of Motion Planning Techniques for Automated Vehicless 中文 自动驾驶汽车运动规划技术回顾 Chinese Gonz lez D P rez J Milan s V
  • 解决文字和elementUI中的进度条progress组件不能在同一行的问题

    我们使用span标签包裹一段文字 想要和elementUI中的progress组件显示在同一行 效果如下 span是一个行元素 progress是一个块元素 起初我是使用弹性盒布局 display flex 想让他们显示在一行 但是使用弹性
  • df查询命令用法区别。df -ih与df -lh

    今天磁盘显示没有可用空间了 google后记录一下 本人是菜鸟一枚 搞不清楚 i 与 h的区别 幸好文章地址http www 111cn net sys CentOS 86335 htm 截图如下 经过对比发现假如执行df lh命令发现磁盘
  • 基于ADRC的FOC位置环控制

    ADRC位置环控制 ADRC介绍 1 非线性跟踪微分器 2 非线性ESO观测器 3 非线性状态误差反馈控制律原理 NLSEF 4 调参流程 1 调TD 2 调ESO 3 调NLSEF 5 基于ADRC的位置环设计 ADRC框图 基于ADRC
  • PKG_CHECK_MODULES未定义

    一直以来 对于使用automake有点害怕 网上的大多资料都是说明autoconf生成什么文件 automake又做什么事情 还有autoscan等等 笔者在使用开源项目过程中遇到了一个问题 PKG CHECK MODULES未定义 奇怪
  • python turtle画表情包--不可以色色

    闲来无事 翻到以前的一个代码 将它魔改一下 不可以色色 先看看运行结果图 代码如下 小伙伴们可以根据自己的需要进行更改 import turtle as t if name main t speed 0 t penup t right 30
  • 机器学习-支持向量机(非线性分类)

    一 介绍 在进行分类的时候 大部分数据并不是线性可分的 而是需要通过数据映射 将数据变换到高维度进行分类 这就需要借助核函数来对其进行变换 我们已经在线性情况下 超平面公式可以写为 对于线性不可分 我们使用一个非线性映射 将数据映射到特征空
  • css3直线运动_纯css3动画--边框线条动画

    这是一款使用纯CSS3制作的效果非常炫酷的元素边框线条动画特效 这个元素边框线条动画使用伪元素和keyframes来制作线条运动效果 制作方法 1 HTML结构 该边框线条动画特效的HTML结构使用的是一个空的 来作为容器 2 CSS样式
  • 后缀名为.phps的文件

    文章目录 前言 一 phps是什么 二 使用情场景 三 其他使用场景 前言 遇到名为index phps的文件 不明白 phps代表什么意思 这里记录一下 一 phps是什么 phps即为 PHP Source PHP Source 由 T
  • DCDC基础(3)--BUCK电路的电感选型

    最近开通了公众号 射频工程师的日常 有文章更新 可以关注一下 谢谢 上一节带大家了解了一下BUCK电路的反馈电阻和自举电容的问题 从原理上分析了下组成BUCK电路的各个元器件的作用 又有人问了 面试中经常被问到BUCK的功率电感怎么选型 电
  • 多线程基础

    文章目录 1 线程简介 1 1 多任务 1 2 多线程 1 2 1 普通方法调用和多线程 1 3 程序 进程 线程 1 3 1 Process与Thread 1 4 核心概念 2 线程实现 2 1 三种创建方式 2 1 1 Thread 2
  • 阿里的easyExcel导出

    easyExcel的gitHub地址 https github com alibaba easyexcel 开发环境 springboot 1 导入依赖
  • 如何在thinkphp5.1中写接口及接口调用

    在thinkphp5 1中如何写接口及如何调用接口 对于php不熟悉的人来说 解除thinkphp还是挺有难度的 下面记录如何编写接口 及如何对编写的接口进行调用 1 首先在thinkphp中的application中的api contro
  • 毕业设计-基于深度学习的安全帽智能识别系统

    目录 前言 课题背景和意义 实现技术思路 一 系统架构 二 基于深度学习的目标检测算法实现 三 交互设计与实现 四 基于深度学习的安全帽智能识别系统测试 五 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或
  • SecureCRT 访问Linux虚拟机(Oracle VM VirtualBox) 返回超时密码错误 解决办法

    问题描述 虚拟机ip能ping通 SecureCRT就是链接不上 解决办法 在找了网上无数多的办法 并没有成功 ssh重启 修改权限 1 设置Oracle VM VirtualBox网络方式 2 进入系统检查ssh 转载 http blog
  • 分享一个python基于数据可视化的智慧社区服务平台源码

    作者 计算机源码社 个人简介 本人七年开发经验 擅长Java Python PHP NET Node js 微信小程序 爬虫 大数据等 大家有这一块的问题可以一起交流 学习资料 程序开发 技术解答 文档报告 JavaWeb项目 微信小程序项
  • 【华为OD机试真题 JAVA】两数之和绝对值最小

    JS版 华为OD机试真题 JS 两数之和绝对值最小 标题 两数之和绝对值最小 时间限制 1秒 内存限制 32768K 语言限制 不限 给定一个从小到大的有序整数序列 存在正整数和负整数 数组 nums 请你在该数组中找出两个数 其和的绝对值
  • CSAPP第二章课后作业题

    include