gcc中关于C/C++标准的选项

man gcc里面说到gcc使用指定的标准编译C/C++的选项是:-std=standard,其中standard可以是

c89(传说中的c89)
iso9899:1990
    Support all ISO C90 programs (certain GNU extensions that conflict with ISO C90
    are disabled). Same as -ansi for C code.

iso9899:199409
    ISO C90 as modified in amendment 1.

c99(传说中的c99)
c9x
iso9899:1999
iso9899:199x
    ISO C99.  Note that this standard is not yet fully supported; see
    <http://gcc.gnu.org/gcc-4.2/c99status.html> for more information.  The names c9x
    and iso9899:199x are deprecated.

gnu89
    GNU dialect of ISO C90 (including some C99 features). This is the default for C code.

gnu99
gnu9x
    GNU dialect of ISO C99.  When ISO C99 is fully implemented in GCC, this will
    become the default.  The name gnu9x is deprecated.

c++98
    The 1998 ISO C++ standard plus amendments. Same as -ansi for C++ code.

gnu++98
    GNU dialect of -std=c++98.  This is the default for C++ code.

还有一个选项就是-ansi,上面也说到了。

以上是在gcc4.2.4里面看到的。

《编程之美》中不要被阶乘吓倒的一个注解

这一节中的第二个问题:求N!的二进制表示中最低位1的位置。其中第二个解法提出N!含有质因数2的个数等于N减去N的二进制表示中1的数目,不过没有给出证明,自己推导了一下,如下所示。

假设N=anan-1...a1a0,其中ai属于{0, 1},an=1。由于N!中含有质因数2的个数为

[N/2] + [N/4] + [N/8] + [N/16] + ...

=anan-1...a1 + anan-1...a2 + ... + anan-1 + an = S       (1)

以上式子两边同时乘以2,得到

anan-1...a10 + anan-1...a20 + ... + anan-10 + an0 + 0 = 2S      (2)

(2) - (1)错位减,得到:

anan-1...a10 - a1 - a2 - ... - an=S

整理得到

N-(a0 + a1 + a2 + ... + an) = S

注意到ai属于{0, 1},因此就得到证明。

 

Linux目录权限相关问题

      最近老是忘记这个东西,现在总结一下不然下次又忘掉了。

      R:就是读权限,用ls命令的的时候必须有这个权限,但是单纯的R权限又没有多大作用,一般是要带X(执行)权限。

      W:写权限,比较好理解,删除,修改,创建文件都需要写权限,需要W权限的相关命令是mv,rm等等,但是依旧有一个问题,如果没有X权限还是没多大用处。

      X:执行权限,如果在文件上的话比较好理解就是“可执行”的意思,但是用在目录这里则是表示“可以进入”的意思,就是你要进入这个目录时候就要求这个权限,比如cd,ls命令都需要相应目录的X权限。