计算机存储数字时存储的全是补码
++运算符分为前置++和后置++,
前置++:先加1,后使用,即先使用变量中内容,然后给结果加1
后置++:先使用变量中内容,整个表达式结束时,给变量加1
逗号表达式,取最后一个表达式的值。
移位操作符
左移操作符<< 左边抛弃、右边补0
右移操作符>>
位操作符
求一个整数存储在内存中的二进制中1的个数
sizeof和数组
逻辑操作符 逻辑与,逻辑或
- 整形提升*
练习
1.求两个数二进制中不同位的个数。编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1999 2299输出例子:7
思路
- 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
- 统计异或完成后结果的二进制比特位中有多少个1–>转化为求一个数存储在内存中的二进制1的个数
int num(int i, int j)
{
int count = 0;
int tmp = i^j;//^异或操作符 相同则为0,不同为1
while (tmp)
{
count++;
tmp = tmp&(tmp - 1);//按位与多少次 就有 多少个1
}
return count;
}
int main()
{
int i = 1999; //011111001111
int j = 2999; //101110110111
int result = num(i, j);
printf("%d\n", result);
system("pause");
return 0;
}
2.打印整数二进制的奇数位和偶数位。获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
在这里插入代码片
3.统计二进制中1的个数。即写一个函数返回参数二进制中 1 的个数。
int main()
{
int num = 10; // x 0000 0000 0000 0000 0000 0000 0000 1010
int count = 0;// x-1 0000 0000 0000 0000 0000 0000 0000 1001&
// 0000 0000 0000 0000 0000 0000 0000 1000
// x 0000 0000 0000 0000 0000 0000 0000 1000
// x-1 0000 0000 0000 0000 0000 0000 0001 0000&
while (num) // 0000 0000 0000 0000 0000 0000 0000 0000
{
num = num&(num - 1);//按位与多少次,就有多少个1
count++;
}
printf("二进制中1的个数 %d \n", count);
system("pause");
return 0;
}
4.交换两个变量(不创建临时变量)不允许创建临时变量,交换两个整数的内容