`

我的<CSAPP>的一些家庭作业

阅读更多

去年因为自身心理原因回家修养.家里比深圳冷许多,所以一直都在运动锻炼身体,荒废了自己的学习.
现在天气暖和了,要天天向上了.下面是自己写的一些小例子,也可以说是作<CSAPP>的一些作业所随便写的一些东西.


1.自定义的define.h的头文件的部分内容
#include <stdio.h>
#include <limits.h>
#include <stdint.h>
#include <stdlib.h>

#define BITS_LENGTH_OF_BYTE 8u

// 检测乘法是否溢出-1
int tmul_ok(int x, int y)
{
    int result = x * y;
    return !x || result / x == y;
}

// 检测乘法是否溢出-2
int tmul_ok_1(int x, int y)
{
    int64_t result = x * y;
    return !x || !y || !(result & INT_MAX);
}

int div16(int x)
{
    int bias = (x >> 31) & 0xf;
    return (x + bias) >> 4;
}

// 判断小端字节序
int little_endian_ok()
{
    unsigned i = 1;
    unsigned char *pi = (unsigned char *)&i;

    return *pi & 1;
}

/* 输出指定基本数据类型的-位模式;
针对小端字节序的系统,从符合人类书写习惯的高位开始输出 */
void show_bits(const char *start_addr, unsigned byte_length)
{
    unsigned char mask_no = 1U;

    for (unsigned i = byte_length; i > 0; i--)
    {
        unsigned blob_var = BITS_LENGTH_OF_BYTE; // blob => bits length of byte
        unsigned char c = *(start_addr + i - 1);
        for (; blob_var > 0; blob_var--)
        {
            printf("%u ", (c >> (blob_var - 1)) & mask_no);
        }
    }

    printf("\n");
}


2.判断自己系统是否是小端字节序

显示是1就说明是小端字节序的系统

#include <stdio.h>
#include "define.h"

int main()
{
    printf("小端字节序:%d\n", little_endian_ok());
    return 0;
}


3.根据输入的数字输出-位模式

简单实现的小东西,所以目前只支持32位和64位的整形数字,感兴趣的同学请自行拓展,拓展好了请发个留言共同进步.

#include <stdio.h>

#include "define.h"

int main(int arg_l, char *args[])
{

    if (arg_l < 2)
    {
        printf("参数输入错误");
        return 0;
    }

    
    // int byte_length = *((int *)args[2]);
    int byte_length = atoi(args[2]);
    const char *start_addr;
    if (byte_length == 4) {
        int i = atoi(args[1]);
        start_addr = (char *)&i;
    }
    else {
        long l = atol(args[1]);
        start_addr = (char *)&l;
    }
    
    show_bits(start_addr, byte_length);
    return 0;
}
0
0
分享到:
评论

相关推荐

    CSAPP的前六章题库与答案

    《CSAPP的前六章题库与答案》涵盖了“深入理解计算机系统”(CSAPP)这一经典教材的早期核心内容。这本书是计算机科学与工程领域的重要参考书籍,它引导学生深入理解计算机系统的底层运作机制,从硬件到软件,从数据...

    (完整版)深入理解计算机系统(第二版)家庭作业答案.doc

    这份文档似乎包含了第二章的一些家庭作业解答,涉及到计算机系统的底层操作,特别是二进制和位操作方面的问题。下面是对这些知识点的详细解析: ### 2.58 int is_little_endian() 该函数用于检测系统是否采用小端...

    深入理解计算机系统(第二版)家庭作业答案

    ### 深入理解计算机系统(第二版)家庭作业答案解析 #### 第二章:深入理解计算机系统二进制 本章节重点在于理解和掌握计算机系统中的二进制表示方法及其在实际编程中的应用。以下是对部分习题的解答与解析。 ###...

    深入理解计算机系统(CSAPP)习题解答

    2. **家庭作业问题**:这类问题通常位于每章末尾,难度不一,从简单的练习到多周的实验项目都有涉及,适合教师作为课后作业或课堂讨论题目使用。 ### 三、具体习题解答分析 #### 习题2.40 - 展示不同类型变量的...

    CSAPP深入理解计算机系统

    该压缩包文件包含了学习《CSAPP》所需的重要资源,包括家庭作业和课后习题。这些练习旨在巩固和扩展书中的概念,使读者能够亲手实践并深入探究书中讲解的原理。以下是几个主要的知识点: 1. **数据表示与计算**:...

    csapp-3e-solutions:深入理解计算机系统第三版作业题答案

    "csapp-3e-solutions" 是一个开源项目,提供了该书第三版的所有作业题的解答。这样的资源对于自学或在没有教师指导的情况下学习这本书的学生来说是非常宝贵的。它允许他们检查自己的答案,理解解题思路,并深入探讨...

    程序员5个刷题网站-CSAPP:计算机系统:程序员的观点。AT复旦大学

    如果我的实验室或家庭作业中有任何错误,请通过 联系我。 结构 实验室 Lab1数一本书的字数 Lab2炸弹实验室 Lab3性能实验室 Lab4 Malloc 实验室 Plus (EE部门不需要) 数据实验室 缓冲实验室 缓存实验室 壳牌实验室 ...

    Homework-CSAPP

    家庭作业 我对CSAPP实验室的解决方案 环境设置: docker container run -it -v F:\csapp\homework:/csapp --name=csapp_env ubuntu:18.04 /bin/bash apt-get update apt-get install sudo sudo apt-get install ...

    csapp 深入理解计算机系统 参考答案

    每个章节都精心设计了实践问题和家庭作业问题,前者直接嵌入到文本中,并在章节末尾提供了解答,后者则位于章节结尾,难度各异,适合不同层次的学习者进行练习。 #### 三、具体章节知识点 ##### 第1章:计算机系统...

    深入理解计算机系统第三版答案

    - 介绍了一些基本的位操作技巧,比如位移、按位与、按位或等。 - 通过具体的例子和练习题帮助学生掌握这些技能。 #### 三、具体习题解析 **问题2.40:** - 本题要求实现三个函数:`show_short()`、`show_long()`...

    2019Fall-CSAPP:哈工大2019秋计算机系统课程

    2019秋季CSAPP 哈工大2019秋计算机系统课程 取走的点点Star吧 ...家庭作业 CSAPP书后习题 笔记总结 CSAPP第二〜九章OneNote笔记总结 期末复习QA 问答题 实验室 8次实验 CMU翻译+ HIT原创 大作业 由郭茁宁提供

    深入理解计算机系统 第二版 part2

    ### 重要知识点解析 #### 一、信息的表示与处理 在《深入理解计算机系统》第二版中,作者从程序员的角度出发,详细介绍了信息在计算机系统中的表示方式及其处理过程。这一部分通常涵盖数字表示(如整数和浮点数)...

Global site tag (gtag.js) - Google Analytics