目录
- int Count_bit1(int a)//统计二进制位中1的个数
- {
- int count = 0;
- //类比十进制中,获得每一位,123,123%10=3,123/10=12,12%10=2
- while(a != 0)
- {
- if(a % 2 == 1)
- count++;
- a = a/2;
- }
- return count;
- }
- int Count_bit2(int a)//统计二进制位中1的个数
- {
- int count = 0;
- int i = 0;
- for(i = 0; i<32; i++)
- {
- //a = a >> i;
- if(((a>>i) & 1) == 1)//移位操作本身不会改变变量的值
- count++;
- }
- return count;
- }
- int Count_bit3(int a)//统计二进制位中1的个数
- {
- int count = 0;
- while(a)
- {
- a = a & (a-1);//a & (a-1) 每一次相邻两位数按位与都会减少一个二进制的1
- count++;
- }
- return count;
- }
- int main(){
- int a = -1;
- int count1 = Count_bit1(a);//该函数对负数不适用
- int count2 = Count_bit2(a);//通过位操作符来计算
- int count3 = Count_bit3(a);//最精简的一种写法
- printf("%d\n", count1);
- printf("%d\n", count2);
- printf("%d\n", count3);
- }
- int Compare_bit1(int a, int b)
- {
- int count = 0;
- int i = 0;
- for(i=0; i<32; i++)
- {
- if(((a>>i)&1) != ((b>>i)&1))
- count++;
- }
- return count;
- }
- int Compare_bit2(int a, int b)
- {
- int tmp = a^b;//直接用异或,相同位为0,不同位为1;
- return Count_bit1(tmp);//然后用函数统计tmp中有多少个1;
- }
- int main(){
- int a = 0;
- int b = 7;
- int ans1 = Compare_bit1(a, b);//每一位分别比较
- int ans2 = Compare_bit2(a, b);//用异或来统计:相同位为0,不同位为1;
- printf("%d\n",ans1);
- printf("%d\n",ans2);
- }
- int a = 5; int b = 3;
- a = a+b; b = a-b; a = a-b;
- printf("%d %d",a,b);
-
- int a =5; int b = 3;
- a = a^b;//用异或的方法;
- b = a^b;
- a = a^b;
- printf("%d %d",a,b);
- void Reverse_string2(char arr[])
- {
- char tmp = arr[0];
- int sz = strlen(arr);
- arr[0] = arr[sz-1];
- arr[sz-1] = '\0';
- if(strlen(arr+1) >= 2)
- {
- Reverse_string2(arr+1);
- }
- arr[sz-1] = tmp;
- }
- int main(){
- char arr[] = "abcdef";
- int sz = strlen(arr);
- Reverse_string2(arr);//递归的方法
- printf("%s\n",arr);}
- int Count_sum1(int a)
- {
- int sum = 0;
- while(a != 0)
- {
- sum += a%10;
- a /= 10;
- }
- return sum;
- }
-
- int Count_sum2(int a)
- {
- if (a < 10)
- return a;
- else
- return Count_sum2(a/10) + a%10;
- }
-
- int main(){
- int a = 123;
- //int sum = Count_sum1(a);//循环的方法
- int sum = Count_sum2(a);//递归的方法
- printf("%d\n",sum);
- }
- int Pow(int n, int k)
- {
- if(k>=1)
- return Pow(n,k-1) * n;
- else
- return 1;
- }
- int main(){
- int n = 5;
- int k = 2;
- int ret = Pow(n,k);
- printf("%d\n", ret); }