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权限。