| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 实验 1 :Data Lab -> 正文阅读 |
|
[数据结构与算法]实验 1 :Data Lab |
bitXor(x, y)使用 ~ 和 & 实现异或操作,返回 x ⊕ y x \oplus y x⊕y
根据异或的运算规则,我们只需要将不同时为 0 0 0 的位和不同时为 1 1 1 做与操作。 tmin()返回最小的整数补码
补码带有符号位,最小的整数补码只有符号位为 1 1 1 ,其他位为 0 0 0 。 isTmax(x)当 x x x 为最大的整数补码时返回 1 1 1 ,否则返回 0 0 0
最大的整数补码为 011111…,因此我们的目的就是将 x x x 变为 0 0 0 。不妨假设 x x x 为最大整数补码。第一步加 1 1 1 后就变成了 T m i n T_{min} Tmin? ,此时 x + T m i n x + T_{min} x+Tmin? 就等于 ? 1 -1 ?1 ,取反后就变成了 0 0 0 。 但是还有一种特殊情况,当 x = ? 1 x=-1 x=?1 时,仍然可以通过前面的步骤来变成 0 0 0,所以我们就要对这种情况进行额外判断,此时 t m i n tmin tmin 的值为 0 0 0 ,进行非操作后就变成了 1 1 1 ,与 x x x 相加后就不等于 0 0 0 ,可以排除这种情况。 allOddBits(x)x x x的奇数位都为 1 1 1时返回 1 1 1,否则返回 0 0 0
首先将数字变成 0x55555555 的形式,取反后为 0xAAAAAAAA ,如果 x x x 的奇数位都为 1 1 1 ,那么与 0xAAAAAAAA 与操作后仍为 0xAAAAAAAA,通过异或进行判断。 negate(x)返回 ? x -x ?x
isAsciDigit(x)当 48 ≤ x ≤ 57 48 \le x \le 57 48≤x≤57 时返回 1 1 1 , 否则返回 0 0 0
要想完成这个目的,我们需要进行两个判断:低 4 4 4 位满足大于等于 0 0 0 并且小于等于 9 9 9 ,高四位等于 3 3 3 。 对于低四位,如果不满足这个条件,那么它对应的位为 0xa 或0xc ,可以通过异或进行判断,对于高四位,可以通过移位加上异或来判断。 conditional(x, y, z)等同于 x ? y : z 这样的操作
这道题如果想到了把 x x x 变成全 0 0 0 或者全 1 1 1 的形式就会比较容易做,通过前两行代码,当 x = 0 x = 0 x=0 时, x x x 的二进制位就是全 0 0 0 的,否则是全 1 1 1 的形式。 isLessOrEqual(x, y)当 x ≤ y x \le y x≤y 时返回 1 1 1, 否则返回 0 0 0
分符号位相同和符号位不同来分类讨论,符号位相同时,需要满足 y ? x ≥ 0 y - x \ge 0 y?x≥0 ;符号位不同时,需要满足 x < 0 x < 0 x<0。 logicalNeg(x)不用 !运算符来实现 !的功能
当 x = 0 x=0 x=0 时, ? x = x -x = x ?x=x ,我们可以利用这个性质来实现 !运算符的功能。 howManyBits(x)用补码表示 x x x 的最小位数
对于正数来说,我们需要找到最高位的 1 1 1 所在的位置,然后加上符号位。对于负数,我们需要找到最高位的 0 0 0 所在的位置,然后加上符号位。对于负数的情况,我们可以进行转换,把 0 0 0 变成 1 1 1,把 1 1 1 变成 0 0 0 ,这样就变成了正数的情况。 floatScale2(uf)对于浮点参数 f,返回 2*f 的位级等价数
首先对特殊的值进行判断,如果是
N
a
n
Nan
Nan 或者无穷大,直接返回
u
f
uf
uf本身即可,对于无穷小的情况,返回乘
2
2
2 后的结果并且加上符号位。对于其他情况则将阶码的值加
1
1
1, 然后返回就可以了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:52:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |