整数除法与右移运算

在C/C++中进行除以2的幂的运算,学过计组的同学,可能会知道更高效的是进行右移运算,右移几位,相当于除以2的几次幂。

C/C++中整数除法,去除小数部分,整数部分作为返回结果。

例如$6/4=1, -6/4=-1$

这里$4=2^2$,那么只要对一个数,右移2位,就相当于除以4了么?

容易用如下代码验证:

#include <stdio.h>
int main(void) {
    printf("%d\n%d\n", 6>>2, -6>>2);
    return 0;
}

考虑到之前的博客有置顶文章,所以需要置顶功能。

Google了一下解决方案,发现了本博客主题是支持置顶功能的,在需要置顶的Front-matter中加上top: true即可。试了一下,能置顶。。只是文章置顶在某一页而不是首页。。

期间看到了Pacman主题支持置顶,需要在_config.yml中配置好需要置顶的文章,略麻烦。

然后看到了next主题支持置顶,在博文front-matter中加上sticky: Sticky即可置顶,根据Sticky的大小来决定置顶顺序。

想实现next主题那样的功能,参考了一篇博文添加Hexo置顶功能的操蛋3小时,在hexo-generator-index中增加比较函数比较top值,我试了一下Bug还是有的,置顶文章后文章日期有些会乱掉(比较函数条件比较少)。

我自己写了一个比较函数,也有问题,后来查了一下Javascriptsort函数,其比较函数和C++的完全不同= =

LeetCode上遇到这么一个题:Next Permutation

意思就是给定一个序列,求下一个排列数。下一个排列数是指重排序列,使得下一个序列的字典序比当前序列要大,如果找不到,就返回最小字典序的那个序列。

要求是一步到位,不能分配多余的内存。

这个题貌似是要求实现C++的next_permutation函数,然后去瞄了一眼其实现:

刚刚发现一个有趣的现象,测试django项目的时候,这样启动服务器:

$ python3 ./manage.py runserver
...
Starting development server at http://127.0.0.1:8000/
...

然后想起laravel项目也是8000端口,就同时启动laravel项目:

$ php artisan serve
Laravel development server started on http://localhost:8000/

问题来了,2个端口一样,按理说应该会冲突啊,可是没有,打开浏览器,输入127.0.0.1:8000,看到的是django的项目。那么laravel项目哪去了,难道没启动成功,可是又没报错?

实现tee

The tee command reads its standard input until end-of-file, writing a copy of the input to standard output and to the file named in its command-line argument. (We show an example of the use of this command when we discuss FIFOs in Section 44.7.) Implement tee using I/O system calls. By default, tee overwrites any existing file with the given name. Implement the –a command-line option (tee –a file), which causes tee to append text to the end of a file if it already exists. (Refer to Appendix B for a description of the getopt() function, which can be used to parse command-line options.)

tee能够从标准输入读入,然后输出同样内容到标准输出,同时也会写到指定的文件中。如果文件存在那么就覆盖,若指定了-a选项,那么就追加内容到文件尾。

When using the Linux-specific reboot() system call to reboot the system, the second argument, magic2, must be specified as one of a set of magic numbers (e.g., LINUX_REBOOT_MAGIC2 ). What is the significance of these numbers? (Converting them to hexadecimal provides a clue.)

reboot()系统调用第二个参数为magic2,为LINUX_REBOOT_MAGIC2系列的幻数,问这系列幻数有什么意义(转换为16进制有线索)?

答:LINUX_REBOOT_MAGIC2系列有4个幻数(宏/常量):

  • LINUX_REBOOT_MAGIC2(672274793 = 0x28121969)
  • LINUX_REBOOT_MAGIC2A(85072278 = 0x05121996)
  • LINUX_REBOOT_MAGIC2B(369367448 = 0x16041998)
  • LINUX_REBOOT_MAGIC2C(537993216 = 0x20112000)

很明显对应4个生日:1969/12/28,1996/05/12,1998/04/16,2000/11/20,这四个日期对应的人物为Linux创始人Torvalds和他的三个女儿Patricia Miranda , Daniela Yolanda , Celeste Amanda的生日…这说明了幻数都是有意义/来源的。。。。