lab1

RAR 在linux下的处理

安装指令: sudo apt-get install p7zip-full p7zip-rar
在此之前可以(软件更新):sudo apt-get update
安装gcc: sudo apt install gcc
查看当前文件所在目录:pwd
解压rar文件: 7z x '文件名'
把所有文件夹弄成可读可写可执行: sudo chmod -R 777 *
查看当前目录下所有文件(夹):ls

安装vmware tools

1.移到主目录下
2. ls查看当前文件名
3. tar -zxvf 解压
4. ls命令查看cd vmware-tools-distrib

sudo ./vmware-install.pl

跟着做就完事了

getbyte:

实验需要注意的是不能用加减乘除,所以加减乘除只能用移位来完成
给的数是四字节(1word)int型只有32位,所以2个数字表示8个bit一个byte(对的,2的四次方16,没有问题)
大致思路就是移位然后和0xFF与(&)一下

在这里插入图片描述

logicalshift

一个奇怪的现象:貌似0这个数在c/c++中是被当成无符号数来处理的(???)执行的是逻辑右移???
所以这道题要执行算术右移貌似只能从‘1’下手:(((1<<31)>>n)<<1)

在这里插入图片描述

在这里插入图片描述
我只移了31位,为什么在扩展成64位时它会自动补32个1呢?哦,因为它是负数

bitcount

掩码运算(就是前面那个与大法)
在这里插入图片描述
好像有那么一丢丢难解释,直接截了别人的图,大概就是把高位一直移位(移2位,移4位,移8位……一直移下去)加到低位的意思。
有点神奇,貌似用十进制表示的正数在c/c++里面都被认为是无符号数进行逻辑右移了(?)加正号也没用

在这里插入图片描述关于减少运算次数那里有点抽象(貌似所谓最高位不为1的意思是指第一次与完2位,会得到10,加下去会得到进位1?过于复杂,不想思考🤔)

bang

在这里插入图片描述
(学……学到了)

tmin

求的是 最小负数 的 补码
假如表示范围为+127~-128 那么最小负数应该是-128 即10000000(可以理解为其值是补码减去2的8次方)
因为有0的存在,就解释了0和-128为什么它们的补码都是它们本身
补码作为无符号数越大,它代表的负数越小(如11111111代表1)
0-11111111代表0,1,2……126,127,-128,-127……-1.

fitsbits

0xFFFFFFFF是个正数,我谢谢你亲爱的,这是为什么呢
于是关于16进制数有一个有趣的现象:0x7FFFFFFF(7个F)与0xFFFFFFFF(8个F)的二进制表示相同(?)
这是一个有趣机制:0x表示为负时,它会吞掉最高位(最高位是符号位?但是一直显示是0)移位的时候会显现出来
另外,关于移位33/-1位的情况可以去百度,是一个有趣的现象

本题考查了符号拓展的情况(?)麻烦
在这里插入图片描述

divpwr

正数做除法直接移位即可,负数不行(因为它是用补码表示的?也就意味着不是单纯的取反而是会多加1)
在这里插入图片描述
但是这是为什么呢为什么呢为什么呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值