一百个一百是多少人民币?
100的100次方,按二进制计算的话,需要64个负数和一个正数,所以实际数字比较大,有15个零,而且全是8位整数。计算机里面一个int型变量只能存整数的32位(64位系统下是64位),换算成十进制就是-2^(63)到+2^(63)−1,也就是−9223372036854775808到+922337203六十次方 。当然这已经是一个很大的数了,比如把它换算成一个短一点的字符串,在C语言里可以这样实现 #include int main() { int i; long n=1;for (i=1;i<=100;i++){//循环100次 n*=2;n%=i;printf("%d",n);}return 0;} 这样,每次循环把两个2相乘再求余,也就是把所有2相乘然后取余,最后的结果是2的一百次方。
以上只是数学上的计算过程,而真正计算机里运算的时候并不是这样做。比如我测试了一把,用gcc编译下面这个程序,用-O0(不进行优化,所有操作原样输出),得到的时间是1.87秒,而如果用-O3(最优化,会进行各种优化,提高效率),时间只需要0.34秒——优化之后快了三倍多!那么为什么会有这么大的加速呢?因为计算机里面的整数不是按照我们习惯的十进制表示的,而是有对应的二进制编码,而且是压缩的二进制编码 ——也就是说100个100在计算机里面其实只占用很少的存储空间。并且因为计算机是二进制的,有一些特别的情况,比如100变成110,这种情况是不需要的,因此就更省空间更省时间了。另外还可以使用浮点数来表示,比整数要省很多空间,不过会产生误差。