一、统计一个数中的二进制中的1的个数:
方法:与十进制的方法类似,都是利用了除整和取余的方法,不同的是二进制取余得到的是0,1
利用这个方法不能进行负数的取1的运算,那么用位操作符进行运算,将要计算的数跟1相与如果得到是1那么就留下,然后利用循环将数右移一位,就可以继续进行操作,
二、不创建变量将两个数进行交换
可以利用加减法(如果超出范围就不行),这时可以利用异或的操作进行
正数的原码,补码,反码都相同
#define _CRT_SECURE_NO_WARNINGS #include//统计二进制中的1的个数 异或和除整取余 int main() { // 类似于十进制的取余在整除一样 int num = 0; scanf("%d", &num); int i = 0; while (num) { if (num % 2 == 1) { i++; } num = num / 2; } printf("%d", i); // 异或进行 int num = 0; int count = 0; scanf("%d", &num); for (int i = 0; i <32 ; i++){ if ((num>>i) & 1 == 1) { count++; } } printf("%d", count); } //不创建变量交换两个变量的值 有加减法和异或的操作法 int main() { int a = 3; int b = 5; a = a + b; b = a - b; a = a - b; printf("a=%d,b=%d", a, b); a = a ^ b; b = a ^ b; a = a ^ b; printf("a=%d,b=%d", a, b); } // 反码,补码,原码的相关概念
负数的补码为反码加一,最高位为符号位1代表的是负数



