C语言-初识操作符(1)

操作符

  • 操作符
    • 算术运算符
    • 移位操作符
    • 位操作符
    • 赋值操作符
    • 单目操作符

算数运算符

操作符
+
-
*
/
%取模(取余)

#include <stdio.h>
int main() {
	//算术运算符
	int a = 2 + 3;
	printf("%d\n", a);//输出5

	int b = 5 - 2;
	printf("%d\n", b);//输出3

	int c = 2 * 3;
	printf("%d\n", c);//输出6

	int d = 9 / 2;
	printf("%d\n", d);//会输出4  因为int是整型

	float e = 9 / 2.0;
	printf("%f\n", e);//会输出4.5

	int f = 9 % 2;//%-取模(取余)
	printf("%d\n", f);//会输出1,因为9%2=1
	return 0;
}

运行结果:

移位操作符

位移操作符

  • 左移操作符 :<<
  • 右移操作符:>>

#include <stdio.h>
int main() {
	//移位操作
	int a = 4;
	printf("变量a:%d\n", a);
	/*
	左移操作符-移动的二进制位:
	a=4=00000000 00000000 00000000 00000100=4
	a>>1=00000000 00000000 00000000 00000010=2
	a<<1=00000000 00000000 00000000 00001000=8
	*/
	int b = a << 1;
	printf("左移操作符:%d\n", b);//输出8
	int c = a >> 1;
	printf("右移操作符:%d\n", c);//输出2
	return 0;
}

运行结果:

位操作符

位操作符
&按位操作符:与
^按位操作符:异或
|按位操作符:或

按位与的用途

  • 清零:
    原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。
  • 取一个数中某些指定位:
    若有一个整数a(2byte), 想要取其中的低字节,只需要将a与8个1按位与即可。
  • 保留指定位

按位或的用途

  • 两个相应的二进制位中只要有一个为真,一直为真。

异或操作符的用途

  • 两个相应的二进制位中只要有一个为真,一直为真。
  • 使特定位翻转。
  • 保留原值
  • 交换两个值,不用临时变量

#include <stdio.h>
int main() {
	//&操作符
	//(1)清零
	int a = 4;//a=00000100
	int b = 0;//b=00000000
	int c = a & b;//00000100&00000000 = 0;输出0
	printf("变量C的值为:%d\n", c);
	//(2)取一个数中某些指定位
	//若有一个整数a(2byte), 想要取其中的低字节,只需要将a与8个1按位与即可。
	int a1 = 210;//a1=210;a1(2byte)=11010010
	int b1 = 15;//b2=15;a2(2byte)=00001111 
	int c1 = a1 & b1;//11010010&00001111=00000010;输出2
	printf("变量C1的值为:%d\n", c1);
	//(3)保留指定位
	int a2 = 180;//a2=180;a1(2byte)=10110100
	int b2 = 107;//b2=107;a2(2byte)=01101011
	int c2 = a2 & b2;//10110100&01101011=00100000;输出32
	printf("变量C2的值为:%d\n", c2);

	//	|	操作符
	//两个相应的二进制位中只要有一个为真,一直为真
	int a3 = 19;//a3=19;a3(2byte)=00010011
	int b3 = 12;//b3=12;b3(2byte)=00001100
	int c3 = a3 | b3;//00010011|00001100=00011111;输出31
	printf("变量C3的值为:%d\n", c3);

	//^ 操作符
	//参加运算的两个二进制位,值相同则为0,否则为1
	//(1)使特定位翻转
	int a4 = 169;//a4=169;a4(2byte)=10101001
	int b4 = 89;//a4=89;a4(2byte)=01011001
	int c4 = a4 ^ b4;;//10101001^01011001=11110000;输出240
	printf("变量C4的值为:%d\n", c4);
	//(2)保留原值
	int a5 = 4;//a5=4;a5(2byte)=00000100
	int b5 = 0;//b5=0;b5(2byte)=00000000
	int c5 = a5 ^ b5;//00000100^00000000=00000100;输出4
	printf("变量C5的值为:%d\n", c5);
	//(2)交换两个值,不用临时变量
	int a6 = 5;//a6=5;a5(2byte)=00000101
	int b6 = 6;//b6=6;a6(2byte)=00000110
	a6 = a6 ^ b6;//00000101^00000110=00000011;输出3
	b6 = b6 ^ a6;//00000110^00000011=00000101;输出5
	a6 = a6 ^ b6;//00000011^00000101=00000110;输出6
	printf("变量a6的值为:%d\n", a6);
	printf("变量b6的值为:%d\n", b6);
	return 0;
}

运行结果:

赋值操作符

赋值操作符
=赋值a=5
b=3
+=加赋值a+=b
a=a+b
-=减赋值a-=b
a=a-b
*=乘赋值a*=b
a=a*b
/=除赋值a/=b
a=a/b
%=求余赋值a%=b
a=a%b
&=按位与赋值a&=b
a=a&b
^=按位异或赋值a^=b
a=a^b
|=按位或赋值a|=b
a=a|b
>>=右移赋值a>>=b
a=a>>b
<<=左移赋值a<<=b
a=a<< b

单目运算符

单目运算符
!逻辑反操作
-负值
+正值
sizeof操作数的类型长度(以字节为单位)
~对一个数的二进制按位取反
--前置、后置 --
++前置、后置++
(类型)强制类型转换
取地址符
&取地址
*间接访问操作符(解引用操作符)

#include <stdio.h>
int main() {

	//!操作符
	printf("!操作符\n");
	int a = 10;//c语言中 0表示假,1(非0)就是真
	printf("%d\n", !a);//h的值原本是10,h为真,!逻辑取反后,真就是假-假就是真。h为假,输出0
	int b = 0;
	printf("%d\n", !b);//i的值原本是0,i为假,!逻辑取反后,真就是假-假就是真。i为真,输出1
	int c = 2;
	if (c) {
		//如果c为真的时候,执行
		printf("变量C为真的时候输出");
	}
	if (!b) {
		//如果b为假的时候,执行 
		printf("变量b为假,!逻辑取反后为真,输出");
	}


	//sizeof是一个操作符,不是函数
	printf("sizeof操作符\n");
	int d = 10;
	printf("%d\n", sizeof(int));//一个整型变量占4字节
	printf("%d\n", sizeof d);//输出4,求数据类型括号不能省略,求变量括号可以不写

	int arr[10] = { 0 };
	printf("%d\n", sizeof(arr));//arr有十个元素,每个元素占4字节,所以 4*10=40
	
	int e = sizeof(arr) / sizeof(arr[0]);//数组arr总共字节   /   数组arr一个元素   =   数组arr有多少元素
	printf("%d\n", e);//40/4=10,数组arr共有10个元素

	
	//++自增
	printf("++操作符\n");
	int f = 5;
	int g = f++;
	printf("后缀自增f++为:%d\n", g);//先运算后自增,g=5;
	int h = 5;
	int i = ++h;
	printf("前缀自增++g为:%d\n", i);//先自增后运算,g=6;


	//--自增
	printf("--操作符\n");
	int j = 7;
	int k = j--;
	printf("后缀自减h--为:%d\n", k);//先运算后自减,g=7;
	int l = 7;
	int m = --l;
	printf("前缀自减--i为:%d\n", m);//先自减后运算,g=6;


	//&取地址
	int n;
	printf("请输入n:\n");
	scanf("%d", &n);
	printf("&获取变量n的地址赋值后输出:%d", n);
	return 0;
}

运行结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值