2017-02-14 4 views
0

my previous question을 해결하면서 나는 더 재미있는 일에 직면했다.JS 스타일의 "정수"수학에 몇 비트를 사용할 수 있습니까?

수 있습니다 얼마나 많은 비트보고 (예, 나는 그들이 내 "너무 정수"하지 알고) 정수를 수학을 시도해보십시오

var n = 0xffffffff; 
// loop over 1P: 
for(var i=1; i<=1024*1024*1024*1024; i*=16) { 
    var v=(n*i).toString(16); 
    console.log('i='+i+'; v='+v+' ('+v.length*4+')'); 
} 
// Output: 
// i=1; v=ffffffff (32) 
// i=16; v=ffffffff0 (36) 
// i=256; v=ffffffff00 (40) 
// i=4096; v=ffffffff000 (44) 
// i=65536; v=ffffffff0000 (48) 
// i=1048576; v=ffffffff00000 (52) 
// i=16777216; v=ffffffff000000 (56) 
// i=268435456; v=ffffffff0000000 (60) 
// i=4294967296; v=ffffffff00000000 (64) 
// i=68719476736; v=ffffffff000000000 (68) 
// i=1099511627776; v=ffffffff0000000000 (72) 
// i=17592186044416; v=ffffffff00000000000 (76) 
// i=281474976710656; v=ffffffff000000000000 (80) 

을 즉 적어도 80 비트를 사용할 수 있습니다 ... He-he!

"불변의 숫자"가 곧 나타납니다! 지금 JS 스타일의 정수 연산에 사용할 수있는 얼마나 많은 비트 그래서

n=0xffffffffffffffff // 64-bit wanted 
18446744073709552000 // what? even decimal for odd hex? 
n.toString(16) 
"10000000000000000" // ooops... 
n-1 
18446744073709552000 
n-2 
18446744073709552000 
n-4 
18446744073709552000 

, ?

FireFox 51 64 비트 디버거에서 테스트되었습니다. 대답 후


좀 더 그림 : 정수 n은 존재해서, 작은 모든 정수 n이 존재보다 것을 의미하지 않기 때문에

var n = 0xffffffffffffffff; 
for(var i=1; i<=1024*1024; i*=2){ 
    console.log('i='+i+'; v='+(n/i-1).toString(16)); 
} 
/* Output: 
i=1; v=10000000000000000 
i=2; v=8000000000000000 
i=4; v=4000000000000000 
i=8; v=2000000000000000 
i=16; v=1000000000000000 
i=32; v=800000000000000 
i=64; v=400000000000000 
i=128; v=200000000000000 
i=256; v=100000000000000 
i=512; v=80000000000000 
i=1024; v=40000000000000 
i=2048; v=1fffffffffffff 
i=4096; v=fffffffffffff 
i=8192; v=7ffffffffffff 
i=16384; v=3ffffffffffff 
i=32768; v=1ffffffffffff 
i=65536; v=ffffffffffff 
i=131072; v=7fffffffffff 
i=262144; v=3fffffffffff 
i=524288; v=1fffffffffff 
i=1048576; v=fffffffffff 
*/ 

답변