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)
但是这是为什么呢为什么呢为什么呢