零基础快乐学习C/C++——09

操作符详解

1. 操作符分类

在这里插入图片描述

  1. 算数操作符
    /----得到的商 %—得到的是余数,对于%只能要求两端都是整型
  2. 移位操作符
int a = 16;
//>>--右移操作符,移动的是二进制位
int b = a>>1;

右移操作符:
算术右移
右边丢弃,左边补原符号位
逻辑右移
右边丢弃,左边补0

int a = -1;
//整数的二进制表示形式有三种:原码补码反码
//但是存储到内存的是补码
//对于负数,100000.....0001 现在写出的是原码
//1111.....1110 反码 1111....1111补码

左移操作符<<
左边丢弃,右边补0
注意对于移位操作符不能移动负数位
例如 num<<-1;

  1. 位操作符
    &按位与----可以理解为乘法
    | 按位或----有一个为1就是1,可以理解为加法
    ^ 按位异或----同0异1

小练习:求一个整数存储在内存中的二进制1的个数

int main()
{
	int num = 0;
	int count = 0;
	scanf("%d",&num);//输入-1
	
	int i 0;
	for(i =0;i<32;i++)//因为是32位
	{
		if(1 == ((num>>i)&1))//想到得到每一位可以通过和1进行按位与,从最低位开始与
			count++;
	}
	printf("%d\n",count);
	return 0;
	
}
  1. 赋值操作符
    在这里插入图片描述

  2. 单目操作符
    在这里插入图片描述
    !—把真变成假,假变成真
    在这里插入图片描述
    第一种是a为真打印hehe
    第二种是a为假打印hehe
    在这里插入图片描述

sizeof计算变量所占内存空间的大小,单位是字节
在这里插入图片描述
结果是2 0
不管a是什么类型,只要放到s这里来,都是s说了算,就是s的大小,短整型2个字节
sizeof表达式不会进行计算,就是个摆设,所以s的值不会发生变化

~按位取反
在这里插入图片描述
注意上面是补码,打印出来的则是原码,所以需要转化成原码 最后得到-1

  1. 关系操作符

在这里插入图片描述
7. 逻辑操作符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首先要知道a++是先用a,再++,所以a此时是0,又因为&&是只要有一个为0就都为0,所以&&后面的都没有算,之后a自增为1,bcd都没加,所以结果是1234

如果a改为1呢?

在这里插入图片描述
2335

  1. 条件操作符

在这里插入图片描述
在这里插入图片描述

b = (a>5?3:-3);
max = (a>b?a:b);
  1. 逗号表达式
    在这里插入图片描述
    在这里插入图片描述
  2. 下标引用、函数调用和结构成员
    关于前两个在之前都有过介绍,现在介绍下结构成员

. 结构体.成员名
-> 结构体指针 ->成员名

//创建了一个结构体类型 struct Stu
struct Stu
{
	char name[20];
	int age;
	char id[20];
};
int main()
{
	struct Stu s1 = {“张三”,20,"2018002394};
	struct Stu* ps = &s1;
	printf("%s\n",ps->name);
	//->结构体指针-成员名
	
	//使用struct Stu这个类型创建了一个学生对象s1 并初始化
	printf("%s\n",s1.name);
	printf("%d\n",s1.age);
	//结构体变量.成员名
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值