#include<stdio.h>//不用临时变量,实现两个数的交换voidmain(){int a =10;int b =20;printf("原先:a=%d b=%d\n", a, b);//方法一
a = a + b;// a = 30
b = a - b;// b = 10
a = a - b;// a = 20printf("转换:a=%d b=%d\n", a, b);printf("------------------------\n");int c =10;// 0000 1010int d =20;// 0001 0100printf("原先:c=%d d=%d\n", c, d);//方法二
c = c ^ d;//c = 0001 1110
d = c ^ d;//d = 0000 1010
c = c ^ d;//c = 0001 0100printf("转换:c=%d d=%d\n", c, d);}
对于一个8bit(1字节)的变量,求其二进制里出现了多少个1
#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>//对于一个8bit(1字节)的变量,求其二进制里出现了多少个1intcount(int ch){int i =0;第一种方式//while(ch)//{// if (ch % 2)// i++;// ch = ch / 2;//}第二种方式,效率较第一种方式有所提升//while(ch)//{// if (ch & 1)// i++;// ch = ch >> 1;//}//第三种方式,效率较前两种方式有所提升while(ch){
i++;
ch = ch &(ch -1);}return i;//还有效率更高的方式,大致就是枚举,具体参考《编程之美》}//一个可以输出二进制的函数,便于观察voidprintfBin(int ch){if(ch){printfBin(ch /2);printf("%d",(ch %2));}elsereturn0;}voidmain(){int ch;int i;printf("请输入一个数(0-255之间):\n");scanf("%d",&ch);printf("%d的二进制为:", ch);printfBin(ch);printf("\n");
i =count(ch);printf("1的个数为:%d\n", i);}