23rd
一
一个二进制数与它按位取反的结果相加,结果一定是 11...111,比如1001 + 0110 = 1111。假设计算机是 4 位的,按照补码的规则,1111 表示 -1,如果将 x 按位取反的结果记做 x' ,可以得到如下等式:x+x'=-1,即 x+x'+1=0 或 -x=x'+1。所以在补码中,求一个数的相反数,是对它按位取反再加 1。
参考资料:
《计算机组成与设计:硬件/软件接口 第 5 版》2.4 节
二
Linux 命令行的扩展
每当我们在命令行中输入一个命令并按下回车键的时候,shell 都会对这条命令中的内容做一些替换,然后再执行这条命令,对命令内容做替换的过程叫做 expansion,翻译成中文应该是叫「扩展」,或者说是「转义」,比如「ls a*」这个命令,输出的是所有文件名以 a 开头的文件,就是 shell 先对「ls a*」做了扩展,把 a* 替换成了当前文件夹下所有以 a 开头的文件名,然后再交由操作系统去执行这条命令。
上面说的这种对「*」的扩展叫做「路径名扩展」,也就是应用于路径或文件名的扩展。不止「*」,其他通配符的使用也属于路径名扩展。
还有一种扩展是「波浪号扩展」,就是这个符号:「~」,当它单独使用时,指代的是当前用户的家目录,比如「cd ~」就是打开当前用户的家目录(其实直接输入「cd」就可以打开家目录);当它后面跟用户名时,指代的是该用户的家目录,比如「cd ~foo」就是打开 foo 用户的家目录。
除此之外,还有算术扩展、括号扩展、参数扩展、命令扩展。
参考资料:
《The Linux Command Line Fifth Internet Edition》第 7 章-Expansion
Last updated
Was this helpful?