一、统计一个数中的二进制中的1的个数:
方法:与十进制的方法类似,都是利用了除整和取余的方法,不同的是二进制取余得到的是0,1
利用这个方法不能进行负数的取1的运算,那么用位操作符进行运算,将要计算的数跟1相与如果得到是1那么就留下,然后利用循环将数右移一位,就可以继续进行操作,
二、不创建变量将两个数进行交换
可以利用加减法(如果超出范围就不行),这时可以利用异或的操作进行
正数的原码,补码,反码都相同
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//统计二进制中的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代表的是负数