C基础-操作符
  rb2XW0fjLLT8 2023年11月02日 53 0

算数操作符

/(除法)

%(取模)

	int a = 5 / 2;	//整数除法
	double a = 5 / 2.0;		//小数除法
	double a = 5 / 2;	//取模两边必须是整数

移位操作符

>>(右移)

<<(左移)

注意:移位数不能为负数(该规则未定义),且只能作用为于整数

	//算术右移:右边丢弃,左边补原符号位
	//逻辑右移:右边丢弃,左边补零
	int a = -1;
	//整数的二进制表示有:原码、反码、补码
	//储存到内存的是补码
	//10000000000000000000000000000001(原码)
	//11111111111111111111111111111110(反码—除符号位,其他位按位取反)
	//11111111111111111111111111111111(补码—在反码的基础上加1)
	//11111111111111111111111111111111(向右移位,最右边丢弃,算术移位最左边补符号位)
	int b = a >> 1;
	printf("%d %d", a, b);
	return 0;

	//左移:左边丢弃,右边补零
	int a = 5;
	int b = a << 1;
	//00000000000000000000000000000101
	//00000000000000000000000000001010

位操作符

&-按二进制位与:对应二进制位全1为1

|-按位或:对应二进制位有1为1

^-按位异或:对应二进制位相同为0,相异为1

//&-按二进制位与:对应二进制位全1为1
	int a = 3;
	int b = 5;
	int c = a & b;
	//00000000000000000000000000000011
	//00000000000000000000000000000101
	//00000000000000000000000000000001
	//显然与完后c=1

	//|-按位或:对应二进制位有1为1
	//00000000000000000000000000000011
	//00000000000000000000000000000101
	//00000000000000000000000000000111
	//显然或完后c=7

	//^-按位异或:对应二进制位相同为0,相异为1
	//00000000000000000000000000000011
	//00000000000000000000000000000101
	//00000000000000000000000000000110
	//显然异或完c=6

练习:不引用中间变量交换a = 3,b=5的值

//加减法—可能会溢出(当给两个极大的值)
int main()
	{
		int a = 3;
		int b = 5;
		a = a + b;
		b = a - b;
		a = a - b;
		printf("%d %d\n", a, b);
		return 0;
	}
//故引入异或法(不用进位试用范围广,但运算速度慢,可读性差)
int main()
	{
		int a = 3;
		int b = 5;
  	//0011
		//0110
		//0101
		a = a ^ b;
		b = a ^ b;
		a = a ^ b;
		printf("%d %d\n", a, b);
	}

求整数二进制原码中1的个数

int main()
{
	int num = 0;
	int count = 0;
	int i = 0;
	scanf("%d", &num);
	
	if (num > 1)
	{
		for (i = 0; i < 32; i++)
		{
			if (((num >> i) & 1) == 1)
			{
				count++;
			}
		}
	}
	else
	{
		int b = ~(num - 1);
		for (i = 0; i < 32; i++)
		{
			if (((b >> i) & 1) == 1)
			{
				count++;
			}
		}
	}
	printf("%d\n",count+1); //最高位不取反

	return 0;
}

结构体操作符

.(结构体.成员名)

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

int main()
{
	int a = 10;
	//使用struct stu这个类型创建了一个学生对象s1,并初始化
	struct stu s1 = { "zhangzhiwei",20,"20231016" };
	struct stu *ps = &s1;
	printf("%s\n", (*ps).name);
	printf("%s\n", ps->id);

	printf("%s\n", s1.name);
	printf("%d\n", s1.age);
	printf("%s\n", s1.id);
	
	return 0;
}

隐式类型转换:

表达式中的字符和短整型操作数在使用之前被转换为普通整型(整形提升)



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

rb2XW0fjLLT8