//目標:覈實64位輸入是2.如果數功率不是2的冪,找到以前的值,這是使用命名空間2.查找2之前的功率
功率性病;
INT主要(){
//Input. 64 bit number
unsigned long long int input = 13174607262084689114;
//Check number is power of two.
if (!((input && (input & (input - 1))) == 0)) {
cout<<"The number is not Power of 2"<<endl;
//Find the previous value of input, which should be power of 2.
//Step 1 : Find the Next power of 2 for the input.
//Step 2 : divide the number by 2
/*End*/
// Step 1
input |= input >> 1;
input |= input >> 2;
input |= input >> 4;
input |= input >> 8;
input |= input >> 16;
input |= input >> 32;
input = input + 1; // input holds next number , power of 2.
// Step 2
input = input >> 1;
cout<<"Power of 2: 64 bit: "<<input<<endl;
}
return 0;
}
代碼中沒有循環。除非你的標準庫被打破,以至於在試圖打印某些數字時它會掛起,我沒有看到在任何條件下代碼可能會有無限循環。 – hobbs 2014-12-02 00:28:55
ideone.com編譯並運行它,並說這個數字不是2的冪 2的冪:64位:0 – pm100 2014-12-02 00:42:12
我想知道它是如何編譯的:代碼有2個{'''但只有一個'}'。 – n0rd 2014-12-02 00:47:31