C语言操作符分类详解

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

int main()
{
	int a = 7;//111;
	int b = a << 1;
	printf("%d\n", b);

	return 0;
}

输出结果:

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

int main()
{
	int a = -1;//111;
	int b = a >> 1;
	printf("%d\n", b);

	return 0;
}

在这里插入图片描述
由此可得,编译器采用的是算术右移。

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

int main()
{
	int a = 3;
	int b = 5;
	int c = a&b;//& - 按二进制位与 - 有0为0
	//011
	//101
	//001
	int d = a | b;//| - 按二进制位或 - 有1为1
	//011
	//101
	//111
	int e = a^b;//^ - 按二进制位异或 相同为0 相异为1
	//011
	//101
	//001
	printf("%d\n", c);
	printf("%d\n", d);
	printf("%d\n", e);
	return 0;
}

输出结果:

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

int main()
{
	int a = 3;
	int b = 5;
	printf("a=%d b=%d\n", a, b);

	a = a^b;
	b = a^b;
	a = a^b;

	printf("a=%d b=%d\n", a, b);
	return 0;
}

输出结果:

在这里插入图片描述

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

int count_one(int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		if (((n >> i) & 1) == 1)
		{
			count++;
		}
	}
	return count;
  
}

int main()
{
	int a = -1;
	int ret = count_one(a);
	printf("%d\n", ret);
	return 0;
}

输出结果:

在这里插入图片描述

//111
//110
//110 - n
//101
//100 - n
//011
//000 - n
int count_one(int n)
{
	int count = 0;
	while (n)
	{
		n = n &(n - 1);
		count++;
	}
	return count;
}

int main()
{
	int a = -1;
	int ret = count_one(a);
	printf("%d\n", ret);
	return 0;
}

输出结果:

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

int main()
{
	int a = 10;
	int b = 0;
	printf("%d\n", !a);// a - 10为真 !a为假0
	printf("%d\n", !b);
	return 0;
}

在这里插入图片描述

int main()
{
	int a = 0;
	int arr[10] = { 0 };
	printf("%d\n", sizeof(a));//sizeof是操作符
	printf("%d\n", sizeof(int));

	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(int[10]));
}

输出结果:

在这里插入图片描述

int main()
{
	int a = 0;
	int arr[10] = { 0 };
	printf("%d\n", sizeof(a));//sizeof是操作符
	printf("%d\n", sizeof(int));

	printf("%d\n", sizeof(arr));
	printf("%d\n", sizeof(int[10]));
}

输出结果:

在这里插入图片描述

void test1(int arr[])
{
	printf("%d\n", sizeof(arr));//4
}
void test2(char ch[])
{
	printf("%d\n", sizeof(ch));
	//4 !注意这里是地址 计算的是地址的大小 32位平台地址4个字节
}
int main()
{
	int arr[10] = { 0 };
	char ch[10] = { 0 };
	printf("%d\n", sizeof(arr));//40
	printf("%d\n", sizeof(ch));//10
	test1(arr);
	test2(ch);
	return 0;
}

输出结果:

在这里插入图片描述

int main()
{
	int a = 14;
	a = (1 << 4) | a;//20
	a = ~(1 << 4)&a;//14
	printf("%d\n", a);

	//00000000 00000000 00000000 00001110
	//    |
	//00000000 00000000 00000000 00010000
	//1<<4;
	//00000000 00000000 00000000 00011110
	//&
	//11111111 11111111 11111111 11101111
	//~(1<<4)
	//00000000 00000000 00000000 00001110
	return 0;
}

输出结果:

在这里插入图片描述

int main()
{
	int a = 10;
	int b = 10;
	printf("%d\n", a++);//10

	printf("%d\n", ++b);//11
	return 0;
}

输出结果:

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

int main()
{
	int a = 0;
	int b = 5;
	//a&b;          按二进制位与
	//a&&b;         逻辑与
	int c = a && b;//有0为0
	int d = a || b;//有1为1
	printf("c=%d\n", c);
	printf("c=%d\n", d);

	return 0;
}

输出结果:

在这里插入图片描述

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;//&&左为假,右不用算了
	//i = a++||++b||d++;
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	return 0;
}

输出结果:

在这里插入图片描述

int main()
{
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	//i = a++ && ++b && d++;//&&左为假,右不用算了
	i = a++||++b||d++;// ||左为真,右不用算了
	printf(" a = %d\n b = %d\n c = %d\n d = %d\n", a, b, c, d);
	return 0;
}

输出结果:

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

int main()
{
	int a = 10;
	int b = 20;
	int max = 0;
	max = a > b ? a : b;
	printf("%d\n", max);
	return 0;
}

输出结果:

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

int main()
{
	int a = 1;
	int b = 2;
	int c = (a>b, a = b + 10, a, b = a + 1);//逗号表达式
	printf("%d\n", c);
	return 0;
}

输出结果:

在这里插入图片描述

//代码3
a = get_val();
count_val(a);
while (a > 0)
{
    //业务处理
    a = get_val();
    count_val(a);
}
//如果使用逗号表达式,改写:
while (a = get_val(), count_val(a), a>0)
{
    //业务处理
}

在这里插入图片描述

int main()
{
	int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	//*(arr+4) == arr[4]
	//*(4+arr) == 4[arr]

	printf("%d\n", arr[4]);
	printf("%d\n", 4[arr]);
	return 0;
}

输出结果:

在这里插入图片描述

int main()
{
	test1();       //实用()作为函数调用操作符。
	test2("hello bit.");//实用()作为函数调用操作符。
	return 0;
}

在这里插入图片描述

struct Book
{
	char name[20];
	int price;
};


int main()
{
	//结构体变量.成员变量
	struct Book a = { "C语言程序设计", 35 };
	printf("书名:%s 定价:%d\n", a.name, a.price);

	//结构体指针->成员变量
	struct Book* pa = &a;
	printf("书名:%s 定价:%d\n", pa->name, pa->price);

	return 0;
}

输出结果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值