主要内容
右移(>>)操作
把补码整体向右移动n位,补0,如果原数为负数则在将符号位赋值为1,正数赋值为0;
#include<stdio.h>
int main()
{
int a = 2;
int b = -2;
int c = b >> 1;
//数据在内存中以补码的形式进行存储
//正数的原码,反码,补码均相同
//符号位1表示负数,0表示正数
//a=2 -0000 0000 0000 0000 0000 0000 0000 0010(原反补相同)
//b=-2 -1000 0000 0000 0000 0000 0000 0000 0010(原码)
//2反码 1111 1111 1111 1111 1111 1111 1111 1101(反码)
//2补码 1111 1111 1111 1111 1111 1111 1111 1110
printf("a=%d\n",a);
printf("b=%d\n",b);
//c的原码 是b的补码向右移位1位
//原码——1111 1111 1111 1111 1111 1111 1111 1111
//反码——1000 0000 0000 0000 0000 0000 0000 0000
//补码——1000 0000 0000 0000 0000 0000 0000 0001
printf("c=%d\n",c);//补码——1000 0000 0000 0000 0000 0000 0000 0001
return 0;
}
左移(<<)操作
把补码整体向左移动n位,补0,如果原数为负数则在将符号位赋值为1,正数赋值为0;
#include<stdio.h>
int main()
{
int a = 2;
int b = -2;
int c = b<<1;
//数据在内存中以补码的形式进行存储
//正数的原码,反码,补码均相同
//符号位1表示负数,0表示正数
//a=2 -0000 0000 0000 0000 0000 0000 0000 0010(原反补相同)
//b=-2 -1000 0000 0000 0000 0000 0000 0000 0010(原码)
//2反码 1111 1111 1111 1111 1111 1111 1111 1101(反码)
//2补码 1111 1111 1111 1111 1111 1111 1111 1110
printf("a=%d\n", a);
printf("b=%d\n", b);
//c的原码 是b的补码向右移位1位
//原码——1111 1111 1111 1111 1111 1111 1111 1100
//反码——1000 0000 0000 0000 0000 0000 0000 0011
//补码——1000 0000 0000 0000 0000 0000 0000 0100
printf("c=%d\n", c);//补码——1000 0000 0000 0000 0000 0000 0000 0100
return 0;
}
#include<stdio.h>
int main()
{
int num1= 2; //00000000 00000000 00000000 00000010
int num2 = 5;// 00000000 00000000 00000000 00000101
int a = num1 | num2;//按位或
//00000000 00000000 00000000 00000111——7
int b = num1 & num2;//按位与
//00000000 00000000 00000000 00000000——0
int c = num1^num2;//按位异或
//00000000 00000000 00000000 00000111——7
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
return 0;
}
#include<stdio.h>
int main()
{
//异或的方法实现数字的交换
//如b=20,c=35——>b=35,c=20
int b = 20, c = 35;
b = b^c;//设置密码
c = b^c;//解码c
b = b^c;//解码b
printf("b=%d c=%d\n",b,c);
return 0;
}
#include<stdio.h>
int main()
{
int a = 0;
int count = 0;
int i = 0;
printf("请输入一个数字\n");
scanf("%d",&a);
//方法2:位操作
for (i = 0; i < 32; i++)
{
if (((a >> i) & 1) == 1)
count++;
}
//方法1:但不能对负数进行操作
/*while (a)
{
if (1 == a % 2)
count++;
a = a / 2;
}*/
printf("count=%d\n",count);
return 0;
}
#include<stdio.h>
//创建一个结构体
struct stu
{
char name[20];
int age;
char id[20];
};
int main()
{
//初始化结构体
struct stu s1= {"隔壁老王",20,"720200004"};
//打印对应问题
printf("name=%s\n",s1.name);
printf("age=%d\n", s1.age);
printf("id=%s\n", s1.id);
//指针引用
struct stu *p = &s1;
printf("name=%s\n", p->name);
printf("age=%d\n", p->age);
printf("id=%s\n", p->id);
return 0;
}