datalab实验1

环境安装

第一步下载虚拟机

https://www.vmware.com/

虚拟机官网

第二步下载镜像

https://releases.ubuntu.com/20.04.4/ubuntu-20.04.4-desktop-amd64.iso?_ga=2.90337498.1753593614.1646563933-382193276.1643206315

下载链接,如果不能用或者想安装其它版本的,就删掉后面的去官网找。

第三部配置镜像文件

创建新的虚拟机时将镜像文件导入即可

第四步更新gcc

sudo apt install build-essential gcc-multilib g++-multilib

输入即可

解题

1. bitXor

题目要求用“与”和“非”表达异或,

先找异或表达式a ^ b=( ~ a & b ) | ( a & ~ b ),发现只要将“或”替换成“与”和“非”的表达式即可,有因为“与”和“或”完全相反,得a & b = ~ ( ~ a | ~ b );a | b = ~ ( ~ a & ~ b )。因此 a ^ b = ~ ( ~ ( ~ a & b ) & ~ ( a & ~ b ));

int bitXor(int x, int y) {
   
    return ~(~(~x&y)&~(x&~y));
}

2. tmin

要求返回2进制的最小值,

即:0x80000000。允许使用位移符直接将1移到第32位即可。1<<31.

int tmin(void) {
   
    int a = 3;
    return a << 31;
    }

3.isTmax

判断x是不是最大值

最大值加一等于二进制最小值:80000000,80000000加它(800000000)取反为ffffffff,再取反为全0,!后即为true,但如果这个数是ffffffff,那么它加一后(00000000)取反加它(00000000)本身也是ffffffff,再取反为全0,!后也为true。根据下图第一次运算到E后从下面的C接着运算排除ffffffff。
在这里插入图片描述

int isTmax(int x) {
   
int i = x+1;
x = x + i;
x = ~x;
x=(x+!i);
return !x;
}

4. allOddBits

判断奇数为上是否全为一

先给出一个全一的数,和x先与后异或,如果x和给定的数在奇数位上相同,则结果将为零。
左后用!判断

int allOddBits(int x) {
    
int a = 0xAA + (0xAA<<8);
  a = a + (a<<16);//令a=AAAAAAAA
  return !((x&a)^a);//如果位置上有不是一的,那么括号内的结果不为零,!后返回0;
}

5. negate

求相反

根据~ a = - ( a + 1 )得:-

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值