datalab详细解析

2023-10-31

本博客参考了链接https://blog.csdn.net/qq_42792383/article/details/86824293

特在此鸣谢。

以下为datalab的部分解析:

​//1
/* 
 * bitXor - x^y using only ~ and & 
 *   Example: bitXor(4, 5) = 1
 *   Legal ops: ~ &
 *   Max ops: 14
 *   Rating: 1
 */
int bitXor(int x, int y) //只用&和~实现^
{
  return (~(~x&~y))&(~(x&y));/*主要应用了摩尔根定律,
  (~(~x&~y))==(x|y),即x或y,(~(~x&~y))&(~(x&y))即x或y并且排除掉x与y同时为真的情况,即异或*/
}
/* 
 * tmin - return minimum two's complement integer 
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 4
 *   Rating: 1
 */
int tmin(void) //求最小的补码
{
  return 1<<31;
}
//2
/*
 * isTmax - returns 1 if x is the maximum, two's complement number,
 *     and 0 otherwise 
 *   Legal ops: ! ~ & ^ | +
 *   Max ops: 10
 *   Rating: 1
 */
int isTmax(int x)//如果x是最大值返回1,否则返回0
{
   
  return 2;
}
/* 
 * allOddBits - return 1 if all odd-numbered bits in word set to 1
 *   where bits are numbered from 0 (least significant) to 31 (most significant)
 *   Examples allOddBits(0xFFFFFFFD) = 0, allOddBits(0xAAAAAAAA) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 12
 *   Rating: 2
 */
int allOddBits(int x)//如果x奇数位全为1,返回1;否则返回0
{
  return !(~x&0xaaaaaaaa);
  /*0xaaaaaaaa的偶数位全为0,奇数位全为1。
  当x满足奇数位全为1时,~x&0xaaaaaaaa的奇数位全为0,偶数位也全为0,!(~x&0xaaaaaaaa)等于1;
  当x不满足奇数位全为1时,~x的奇数位必有为1的,~x&0xaaaaaaaa不为0,!(~x&0xaaaaaaaa)等于0*/
}
/* 
 * negate - return -x 
 *   Example: negate(1) = -1.
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 5
 *   Rating: 2
 */
int negate(int x) //求-x
{
  return ~x+1;
}
//3
/* 
 * isAsciiDigit - return 1 if 0x30 <= x <= 0x39 (ASCII codes for characters '0' to '9')
 *   Example: isAsciiDigit(0x35) = 1.
 *            isAsciiDigit(0x3a) = 0.
 *            isAsciiDigit(0x05) = 0.
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 15
 *   Rating: 3
 */
int isAsciiDigit(int x)//如果x在0x30到0x39之间返回1;否则返回0
{
  /*0x30到0x39的数x满足,x-0x30的符号位为0,x-0x3a的符号位为1*/
  return (!((x+(~(0x30)+1))>>31))&((x+(~(0x3a)+1))>>31);
  /*(x+(~(0x30)+1)表示x-0x30;
  (!((x+(~(0x30)+1))>>31))表示取x-0x30的符号位再取反;((x+(~(0x3a)+1))表示x-0x3a;
  ((x+(~(0x3a)+1))>>31)表示取x-0x3a的符号位;(!((x+(~(0x30)+1))>>31))&((x+(~(0x3a)+1))>>31)
  表示只有当x-0x30的符号位为0且x-0x3a的符号位为1时返回1;*/
}
/* 
 * conditional - same as x ? y : z 
 *   Example: conditional(2,4,5) = 4
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 16
 *   Rating: 3
 */
int conditional(int x, int y, int z)//x为0返回z;否则返回y
{
  int mask;
  mask=!x+~1+1;
  return (mask&y)|(~mask&z);
  /*!x+~1+1相当于!x-1;当x不为0时,!x-1等于-1,而-1的补码为0xffffffff,
  0xffffffff&y等于y,~0xffffffff等于0,0&z等于0,y|0等于y;
  当x为0时,!x-1等于0,0&y等于0,~0等于0xffffffff,0xffffffff&z等于z,0|z等于z*/
}
/* 
 * isLessOrEqual - if x <= y  then return 1, else return 0 
 *   Example: isLessOrEqual(4,5) = 1.
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 24
 *   Rating: 3
 */
int isLessOrEqual(int x, int y) //x<=y返回1,否则返回0
{
  return ((((x+~y+1)>>31)&0x1)|!(x^y)|((x>>31)&0x1)&!((y>>31)&0x1))
  &!(!((x>>31)&0x1)&((y>>31)&0x1));
  /*x+~y+1等于x-y;
  当x<y时,(x+~y+1)>>31等于0xffffffff,0xffffffff&0x1等于0x1;
  !(x^y)等于0x0,0x1|0x0等于1;当x=y时,(x+~y+1)>>31等于0x0,0x0&0x1等于0x0,
  !(x^y)等于0x1,0x0|0x1等于1;当x>y时,(x+~y+1)>>31等于0x0,0x0&0x1等于0x0,
  !(x^y)等于0x0,0x0|0x0等于0*/
  //后面的操作考虑了两种溢出情况,当x为负数y为正数返回1,当x为正数y为负数返回0
}
//4
/* 
 * logicalNeg - implement the ! operator, using all of 
 *              the legal operators except !
 *   Examples: logicalNeg(3) = 0, logicalNeg(0) = 1
 *   Legal ops: ~ & ^ | + << >>
 *   Max ops: 12
 *   Rating: 4 
 */
int logicalNeg(int x) //不用!的条件下实现!运算
{
  return ((~x&~(~x+1))>>31)&1;
  /*-x=~x+1,当x取0时,计算机中x与-x符号位均为0,
  x=TMin时,x与-x符号位均为1;其它情况下,x与-x符号位必然不同。所以,(~x&~(~x+1))
  只有当x等于0时符号位为1,即((~x&~(~x+1))>>31)&1等于1,其余情况返回0*/
  
}
/* howManyBits - return the minimum number of bits required to represent x in
 *             two's complement
 *  Examples: howManyBits(12) = 5
 *            howManyBits(298) = 10
 *            howManyBits(-5) = 4
 *            howManyBits(0)  = 1
 *            howManyBits(-1) = 1
 *            howManyBits(0x80000000) = 32
 *  Legal ops: ! ~ & ^ | + << >>
 *  Max ops: 90
 *  Rating: 4
 */
int howManyBits(int x) //求表示x至少需要几位
{
  return 2;
}
//float
/* 
 * floatScale2 - Return bit-level equivalent of expression 2*f for
 *   floating point argument f.
 *   Both the argument and result are passed as unsigned int's, but
 *   they are to be interpreted as the bit-level representation of
 *   single-precision floating point values.
 *   When argument is NaN, return argument
 *   Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while
 *   Max ops: 30
 *   Rating: 4
 */
unsigned floatScale2(unsigned uf)//将无符号整型当作浮点数,实现2.0*uf
   {
        unsigned s = uf&0x80000000;//记录符号位,其余位置0
	unsigned exp = uf&0x7f800000;//记录阶码,其余位置0
	unsigned frac = uf&0x007fffff;//记录尾数,其余位置0
	if(!exp) //如果uf的阶码为0
    {
		frac<<=1;
/*将frac左移一位,若尾数部分第一位为0,左移前后均为非规格化数,
尾数左移一位就相当于乘2;若尾数部分第一位为1,左移前为非规格化数,
左移后阶码部分由00000000变为00000001,阶码由1-127=-126(1-Bias)
变为e-127=1-127=-126(e-Bias),所得数为规格化数,尾数被解释为1+f,
相当于尾数乘2,阶码不变*/
    
   }
	else if(exp^0x7f800000) //如果阶码部分不为全1
   {
		exp += 0x00800000;//阶码加1,对于规格化数,相当于乘2
		if(!(exp^0x7f800000))//如果加1后,阶码为全1,将尾数位全置0,返回值即是无穷大
                {
			frac = 0;
		}
   }
	/*对于阶码为在本身为全1的NaN,本函数没有对其进行操作,返回原数据,满足关卡要求*/
	return s|exp|frac;//将符号位,阶码位,尾数位通过按位异或结合起来
}

/* 
 * floatFloat2Int - Return bit-level equivalent of expression (int) f
 *   for floating point argument f.
 *   Argument is passed as unsigned int, but
 *   it is to be interpreted as the bit-level representation of a
 *   single-precision floating point value.
 *   Anything out of range (including NaN and infinity) should return
 *   0x80000000u.
 *   Legal ops: Any integer/unsigned operations incl. ||, &&. also if, while
 *   Max ops: 30
 *   Rating: 4
 */
int floatFloat2Int(unsigned uf)//将无符号整型当作浮点数,实现(int)uf
{
  return 2;
}
/* 
 * floatPower2 - Return bit-level equivalent of the expression 2.0^x
 *   (2.0 raised to the power x) for any 32-bit integer x.
 *
 *   The unsigned value that is returned should have the identical bit
 *   representation as the single-precision floating-point number 2.0^x.
 *   If the result is too small to be represented as a denorm, return
 *   0. If too large, return +INF.
 * 
 *   Legal ops: Any integer/unsigned operations incl. ||, &&. Also if, while 
 *   Max ops: 30 
 *   Rating: 4
 */
unsigned floatPower2(int x) //将整型当作浮点数,实现2.0^x
{
    return 2;
}
​

#以下为运行结果

#datalab让我们深入位级去思考问题,本实验需要用到许多巧妙的办法与技巧去实现

看似简单却令人无从下手的问题。关注符号位,关注溢出情况,关注补码最小值......

最终还是归结于关注数据如何在计算机中存储以及如何进行运算。

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

datalab详细解析 的相关文章

  • 树莓派入门教程 - 0 - 准备篇 - 0.3 树莓派串口访问终端

    电脑需要提前安装的工具 SSH 串口 终端神器 MobaXterm 官网下载链接 https mobaxterm mobatek net download html 使用到的硬件 USB转TTL模块 CH340 和 CP2102均可 CP2
  • 1.2-知识图谱有什么用?

    知识图谱经过几年的发展已经得到广泛的应用 当知识图谱遇上人工智能 更加突显出了它的优势和价值 最先应用于搜索 最典型的就是在谷歌搜索引擎里面应用 谷歌是在2012年率先提出来知识图谱的概念 提出这个概念的最主要的目的就是用于改善它的搜索引擎
  • ospf小结

    ospf卡住的原因 route id相同 认证不通过 区域ID不同 特殊区域标示不一致 优先级都为0 无法选举 MTU值不匹配 包的交互不完整 网络中丢包等 LSA加载不完全 hello包时间不一致 MA网络掩码不一致 虚链路建邻ABR的两
  • JVM常量池最全详解-常量池/运行时常量池/字符串常量池/基本类型常量池,看这一篇就够了

    JVM常量池最全详解 常量池 运行时常量池 字符串常量池 基本类型常量池 看这一篇就够了 常量池详解 1 字面量和符号引用 1 1 字面量 1 2 符号引用 2 常量池vs运行时常量池 3 常量池 静态常量池 4 运行时常量池 5 字符串常
  • Introduction to Scientific Programing and Simulation Using R chapter 04 答案

    strong span style font size 32px Ex1 span strong span style color 33cc00 programe cha4 6 ex1 img src https img blog csdn
  • h-a-p-p-e-n-before原则的理解

    happen before 可真是一个经典又老生常谈的话题 规则一共就八条 但看起来总有种抓不住重点的感觉 今天再整理一下对这八条规则的理解 首先我的理解是 happen before 的语义与在什么什么之前发生完全没有关系 其语义是如果
  • 网络安全实验室 综合关 解析

    网站地址 http hackinglab cn ShowQues php type pentest 第一关 渗透测试第一期 先看看 登录界面 发现可以注册和忘记密码 忘记密码可以重置密码 思路如下 重置admin密码 发现 不能直接重置密码
  • 【赠书活动|第四期《互联网广告系统:架构、算法与智能化》】

    文章目录 内容简介 作者简介 读者对象 大咖推荐 抽奖方式 本期中奖者 广告平台的建设和完善是一项长期工程 例如 谷歌早于2003年通过收购Applied Semantics开展Google AdSense 项目 而直到20年后的今天 谷歌
  • sql连接查询

    sql连接查询 单表查询 student表 select 列名 from 表名 查看全表 SELECT FROM student 可以匹配为全选 在student表中查找赵六的信息 SELECT FROM student WHERE sna

随机推荐

  • 插入时出现MyBatisSystemException: nested exception is

    检查完xml文件没错后 还是出现错误 org mybatis spring MyBatisSystemException nested exception is org apache ibatis binding BindingExcept
  • SourceInsight4.0黑色背景主题

    SourceInsight4 0黑色背景主题 在网上找了一通花了好多积分最后发现只改了代码区 左右代码索引文件列表和函数调用关系图都还是白底 最后自己在设置里面找了找 发现在这个版本中SI已经内置了一些常用的主题配色 先放效果图 设置在这里
  • JAVA设计模式(21) —装饰(Decorator)模式

    定义 动态的给一个对象添加一些额外的职责 就增加功能来说 Decorator模式相比生成子类更为灵活 类型 对象结构型模式 别名 包装模式 Wrapper 类图 Decorator装饰模式是一种结构型模式 它主要是解决 过度地使用了继承来扩
  • Python3实现通过HTTP协议进行文件上传及下载

    要实现这个功能 你需要在主机A上编写一个Python程序 该程序监听HTTP上传请求并处理上传的文件 同时 在主机B上 你可以使用任何支持HTTP POST请求的工具 如curl或浏览器插件 上传文件 以下是一个简单的实现示例 在主机A上的
  • Python opencv学习-4在图片上用鼠标绘制矩形区域、绘制矩形框、曲线等

    程序功能鼠标按下 拖拽生成矩形框 缺陷 拖过的区域涂黑 而且不彻底 后期换写法测试 基本逻辑 鼠标按下松开 获取坐标 绘制矩形等 未看明白如何获取到的初始坐标和结束坐标 x y从哪获取的值 import numpy as np import
  • Node.js 入门 —— 中间件

    文章目录 1 前言 2 中间件的概念 2 1 什么是中间件 2 2 中间件的调用流程 2 3 Express 中间件的格式 3 express 中间件 3 1 定义中间件函数 3 2 全局生效的中间件 3 3 局部生效的中间件 3 4 中间
  • 深度学习------keras,torch对mnist,cifar2,cifar3,cifar10数据集的读取总结

    1 tensorflow读取 1 1 mnist数据集 import tensorflow as tf from tensorflow keras datasets import mnist cifar10 cifar100 train x
  • mysql与java编写人事管理系统,java+mysql企业人事管理系统的设计

    摘 要 随着历史脚步的前进 我们步入了科技高速发展的二十一世纪 互联网技术得到了空前发展 极大地提高了人们工作的效率 改善了人们的工作生活 产业信息化管理已经成为提高企业生产与管理效率的首要选择 然而 在人事管理模块 国内的很多中小型企业依
  • 错误:非法字符:“\ufeff”

    导入开源的项目的时候 你可以碰到以上的编码问题 这一般这个项目是用eclipse开发的 主要原因是 Eclipse可以自动把UTF 8 BOM文件转为普通的UTF 8文件 但Android Studio需要重新转一下 解决方法 将编码格式U
  • Java序列化

    目录 序列化机制 transient 关键字 序列化对象 反序列化对象 序列化机制 Java 提供了一种对象序列化的机制 该机制中 一个对象可以被表示为一个字节序列 该字节序列包括该对象的数据 有关对象的类型的信息和存储在对象中数据的类型
  • 重定向丢失cookie问题

    风和日丽 阳光明媚 生产bug来了 java 设定的cookie值 重定向后这个cookie获取不到 竟然奇怪的不见了 先说解决办法 通过设置domain path可以获取到这个cookie 记住 这个要考的 domain 是域 path
  • ubuntu18.04启动时在Starting Gnome Display Manager出现问题

    Ubuntu开机一直卡在 OK Started GNOME Display Manager处 进不去系统 当你进不了系统的时候你是打不开终端的 原因 磁盘空间已满或更新异常 解决 1 按alt ctrl F1 F6 输入用户名和密码 2 输
  • 人脸识别三大经典算法_[AI频道]人脸识别商业化应用开发指南

    壹点方圆 AI频道 人工智能商业化 技术 产品与应用 一 人脸识别基本原理及应用领域 二 商业化落地中的关键点 三 从0到1快速搭建人脸识别应用 一 人脸识别基本原理及应用领域 从人工智能技术演进曲线来看 人脸识别技术目前正处于爆发阶段 并
  • 西门子828d车削编程技术_干!货!来!啦!西门子数控系统车削加工编程合集...

    哈喽 艾瑞巴蒂 如昨天预告所说 今天我们一大早就送来了诚意满满的干货 小伙伴们是不是在车床加工时遇到过手拿图纸 但不知该如何下手 如何在控制器里编程 程序开头和结尾有啥注意事项 子程序怎样编写 怎么保证螺纹的切削效果 车铣复合如何编程 等等
  • 计算机英语名词简释(轉載)

    计算机英语名词简释 一 著名公司及其商标名 Microsoft 有时缩略为MS 是全球最著名的软件商 美国软件巨头微软公司的名字 Microsoft其实是由两个英语单词组成 Micro意为 微小 Soft意为 软的 此处应为 Softwar
  • Spring boot 启用 Spring Data JPA Auditing(审计功能)

    一 Auditing功能简介 先贴上Spring Data JPA的官方文档 https docs spring io spring data jpa docs 2 0 9 RELEASE reference html 项目中每条数据在创建
  • 利用C语言 找出数组中的最大值和最小值

    include
  • cpuz北桥频率和内存频率_搞清楚时序与频率,买内存条就不会入坑

    很多时候购买者都会忽视在电脑中起到不可忽视作用的CPU以及硬盘 购买内存的时候 人们更加关注的也是它的价格以及所拥有的容量 而并非性能上的命门 频率 以及 时序 很多人表示好奇 究竟何为频率 所谓内存的频率 指的是在内存工作的过程中 以兆赫
  • 统计学中常见的分布汇总及相关概念

    常见分布 统计学中有很多常见的分布 在此对这些分布进行梳理 离散型随机变量分布 1 离散型均匀分布 若随机变量有n个不同值 具有相同概率 则我们称之为离散均匀分布 通常发生在我们不确定各种情况发生的机会 且认为每个机会都相等 例如 投掷骰子
  • datalab详细解析

    本博客参考了链接https blog csdn net qq 42792383 article details 86824293 特在此鸣谢 以下为datalab的部分解析 1 bitXor x y using only and Examp