按位取反 ~ 0变1 1变1
按位与 & 全1为1 一0为0
按位或 | 全0为0 一1为1
按位异或 ^ 相同为0 不同为1
移位运算符
左移 <<
<< X 等价于 乘以 2的X次方 ,用0填充位
右移 >>
>> X 等价与 除以 2的X次方 ,如果有符号,不同的机器可能有不同的结果
测试源码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1、按位取反 ~
void test01()
{
int num = 2;
printf("~num = %d\n", ~num);
// 010 按位取反 101 原码
// 101 补码 110 + 1 = 111------》-3
}
//2、按位与
void test02()
{
int num = 125;
if ( (num & 1) == 0)
{
printf("num为偶数\n");
}
else
{
printf("num为奇数\n");
}
}
//3、按位或 |
void test03()
{
int num1 = 5;
int num2 = 3;
printf("num1 | num2 = %d\n", num1 | num2); // 7
}
void test04()
{
int num1 = 10;
int num2 = 20;
printf("num1 = %d\n", num1);
printf("num2 = %d\n", num2);
//利用按位异或实现两个数的交换
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
//不用临时数字实现两个变量交换
//num1 = num1 + num2;
//num2 = num1 - num2;
//num1 = num1 - num2;
printf("交换后\n");
printf("num1 = %d\n", num1);
printf("num2 = %d\n", num2);
}
//左移运算符
void test05()
{
int num = 10;
printf("%d\n", num <<= 3);
}
//右移运算符
void test06()
{
int num = 10;
printf("%d\n", num >>= 1);
}
int main(){
test01();
test02();
test03();
test04();
test05();
test06();
system("pause");
return EXIT_SUCCESS;
}
测试结果