diff --git "a/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/3.\344\275\215\350\277\220\347\256\227/2.\344\272\214\350\277\233\345\210\266\346\225\260/count.md" "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/3.\344\275\215\350\277\220\347\256\227/2.\344\272\214\350\277\233\345\210\266\346\225\260/count.md" new file mode 100644 index 0000000000000000000000000000000000000000..834656c59561a69dff895ad87f80487f1b15e594 --- /dev/null +++ "b/data/3.C\350\257\255\350\250\200\351\253\230\351\230\266/3.\344\275\215\350\277\220\347\256\227/2.\344\272\214\350\277\233\345\210\266\346\225\260/count.md" @@ -0,0 +1,74 @@ +# 计算位数 + +计算整数的二进制形式有多少位。 + +## template + +```c +#include + +$code + +int main(char** args){ + printf("bits(%d) has %d bits\n", 100, bits(100)); + printf("bits(%d) has %d bits\n", 32, bits(32)); + printf("bits(%d) has %d bits\n", 10, bits(10)); + printf("bits(%d) has %d bits\n", 25, bits(25)); + printf("bits(%d) has %d bits\n", 7, bits(7)); + return 0; +} +``` + +## 答案 + +```c +unsigned int bits(unsigned int x){ + unsigned int n = 0; + while(x){ + x >>= 1; + n++; + } + return n; +} +``` + +## 选项 + +### 位移计算没有保存 + +```c +unsigned int bits(unsigned int x){ + unsigned int n = 0; + while(x){ + x >> 1; + n++; + } + return n; +} +``` + +### 没有括号导致流程错误 + +```c +unsigned int bits(unsigned int x){ + unsigned int n = 0; + while(x) + x >>= 1; + n++; + + return n; +} +``` + +### 运算符错误 + +```c +unsigned int bits(unsigned int x){ + unsigned int n = 0; + while(x){ + x << 1; + n++; + } + return n; +} +``` \ No newline at end of file