zoukankan      html  css  js  c++  java
  • 20155302 课堂实践

    20155302 课堂实践

    第二题

    1. 调用附图代码,编写一个程序 “week0602学号.c",用show_int(), show_float()打印一下你的4位学号,参考教材P33打印出匹配的位序列。

    2. 提交运行结果截图,要全屏,要包含自己的学号信息

    解答:

    根据课本P31与P32内容,使用强制类型转换来规避类型系统,打印程序对象的字节表示。仅仅传递给show_bytes一个指向他们参数x的指针&x,且这个指针被强制类型转换为"unsigned char*"。让程序把指针看成一个字节序列,而不是原始数据类型的对象。然后打印数据对象的字节序列,之后加上主函数就好了,打印学号及对应序列。

    第三题

    1. 编写一个程序 “week0603学号.c",运行下面代码:

      1 short int v = -学号后四位
      2 unsigned short uv = (unsigned short) v
      3 printf("v = %d, uv = %u ", v, uv);

    2. 在第三行设置断点用gdb调试,用p /x v; p /x uv 查看变量的值,提交调试结果截图,要全屏,要包含自己的学号信息

    解答:

    课上实验时出现了很多错误,回来百度后发现是头文件重复混乱什么的,然后课下把虚拟机此文件夹中的一系列失败的残次代码都删掉,然后重新手打建了新的文件就好了

    课下作业一

    2.96:

    #include <stdio.h>
    #include <assert.h>
    #include "float-f2i.h"
    
    
    int float_f2i(float_bits f) {
      unsigned sig = f >> 31;
      unsigned exp = f >> 23 & 0xFF;
      unsigned frac = f & 0x7FFFFF;
      unsigned bias = 0x7F;
    
      int num;
      unsigned E;
      unsigned M;
    
      
      if (exp >= 0 && exp < 0 + bias) {
        
        num = 0;
      } else if (exp >= 31 + bias) {
        
        num = 0x80000000;
      } else {
        E = exp - bias;
        M = frac | 0x800000;
        if (E > 23) {
          num = M << (E - 23);
        } else {
         
          num = M >> (23 - E);
        }
      }
    
      return sig ? -num : num;
    }
    

    2.97:

    #include <stdio.h>
    #include <assert.h>
    #include <limits.h>
    #include "float-i2f.h"
    
    
    int bits_length(int i) {
      if ((i & INT_MIN) != 0) {
        return 32;
      }
    
      unsigned u = (unsigned)i;
      int length = 0;
      while (u >= (1<<length)) {
        length++;
      }
      return length;
    }
    
    
    unsigned bits_mask(int l) {
      return (unsigned) -1 >> (32-l);
    }
    
    
    float_bits float_i2f(int i) {
      unsigned sig, exp, frac, rest, exp_sig /* except sig */, round_part;
      unsigned bits, fbits;
      unsigned bias = 0x7F;
    
      if (i == 0) {
        sig = 0;
        exp = 0;
        frac = 0;
        return sig << 31 | exp << 23 | frac;
      }
      if (i == INT_MIN) {
        sig = 1;
        exp = bias + 31;
        frac = 0;
        return sig << 31 | exp << 23 | frac;
      }
    
      sig = 0;
     
      if (i < 0) {
        sig = 1;
        i = -i;
      }
    
      bits = bits_length(i);
      fbits = bits - 1;
      exp = bias + fbits;
    
      rest = i & bits_mask(fbits);
      if (fbits <= 23) {
        frac = rest << (23 - fbits);
        exp_sig = exp << 23 | frac;
      } else {
        int offset = fbits - 23;
        int round_mid = 1 << (offset - 1);
    
        round_part = rest & bits_mask(offset);
        frac = rest >> offset;
        exp_sig = exp << 23 | frac;
    
        
        if (round_part < round_mid) {
         
        } else if (round_part > round_mid) {
          exp_sig += 1;
        } else {
         
          if ((frac & 0x1) == 1) {
           
            exp_sig += 1;
          }
        }
      }
    
      return sig << 31 | exp_sig;
    }
    


  • 相关阅读:
    java中常量定义在interface中好还是定义在class中
    CharacterEncodingFilter-Spring字符编码过滤器
    Integer判断相等,到底该用==还是equals
    ThreadLocal实现session中用户信息 的线程间共享
    分布式部署引发的问题
    分布式部署
    LogBack通过MDC实现日志记录区分用户Session
    Fragment 简介 基础知识 总结 MD
    直播 相关技术文章 相关调研文章
    直播 背景 技术体系 乐视云直播Demo
  • 原文地址:https://www.cnblogs.com/STILLlover521/p/7751771.html
Copyright © 2011-2022 走看看