操作符(一)

目录

一,算数操作符

二,原码反码补码

三,移位操作符

四,位操作符

五, 赋值操作符

1. 复合赋值符

2.单目操作符

六,逻辑操作符

一,算数操作符

+ - * /  加减乘除

除法:整数除法和小数除法(除数不可以为0)

int main()
{
	int r = 7 / 2;
	printf("%d\n", r);
	double d = 7.0/ 2;
	printf("%lf\n", d);
	return 0;
}

取模%操作符 (两个操作数必须都是整数)

int main()
{
	int r = 17 % 8;
	printf("%d", r);
	return 0;
}

二,原码反码补码

1. 正整数的三码相同;负整数的要计算

2. 正数

根据正负直接写出二进制序列就是原码;一个整形是4个字节,32个比特位。例如:

15=00000000000000000000000000001111

-15=10000000000000000000000000001111

(最高位是符号位,是1表示负数,是0表示正数)

3.负数

原码的符号位不变,其他位按位取反得到反码:     11111111111111111111111111110000

反码加1得到补码 :                                                 11111111111111111111111111110001

整数在内存中存储的是补码; 计算的时候也是使用补码计算.

三,移位操作符

1. <<左移操作符   ;  >>右移操作符    (操作数是整数)

移位操作符,移位移动的是补码的二进制序列。

2. 右移算数右移:右边丢弃,左边补符号位。

逻辑右移:右边丢弃,左边补0(一般编译器用算数右移)

00000000000000000000000000000111

15右移得到7。(正数右移有除2的作用)

int main()
{
	int a = 15;
	int b = a >> 1;
	printf("%d\n", b);
	printf("%d\n", a);
}
//结果为7  ,15

3. 左移:左边丢弃,右边补0

int main()
{
	int a = 15;
	int b = a << 1;
	printf("%d\n", b);
	printf("%d\n", a);
}
//结果是30 ,15

> 要想改变a的值,a<<=a   a>>=a。

> 对于移位运算符,不要移动负数位,这个是标准未定义的。

四,位操作符

& 按位与   | 按位或    ^按位异或  (操作的是二进制位)

1. &:对应二进制位都为1才是1

int main()
{
	int a = 3;  
	//0000000000000000000000000000011
	int b = -5;
	//1000000000000000000000000000101;
	//1111111111111111111111111111010;
	//1111111111111111111111111111011;
	int c = a & b;
	//0000000000000000000000000000011;
	printf("%d\n", c);
	return 0;
}

//结果是3

2. | :对应二进制位都为0才为0

int main()
{
	int a = 3;
	//0000000000000000000000000000011
	int b = -5;
	//1000000000000000000000000000101;
	//1111111111111111111111111111010;
	//1111111111111111111111111111011;
	int c = a | b;
	//1111111111111111111111111111011;
	printf("%d\n", c);
	return 0;
}
//结果是-5

3. ^ :对应二进制位相同为0,相异为1。

int main()
{
	int a = 3;
	int b = -5;
	int c = a ^ b;
	printf("%d\n", c);
	return 0;
}//结果是-8

4.不创建临时变量,交换两个变量的值

int main()
{
	int a = 3;
	int b = 5;
	a = a ^ b;
	b = a ^ b;
    a = a ^ b;
	printf("%d %d", a, b);
	return 0;
}

五, 赋值操作符

1. 复合赋值符

+=  -=  *=  /=  %=  >>=  <<=  &=  |=  ^=  ^=

2.单目操作符

!           逻辑反操作
-           负值
+           正值
&           取地址
sizeof       操作数的类型长度(以字节为单位)
~           对一个数的二进制按位取反
--           前置、后置 --
++           前置、后置 ++
*           间接访问操作符 ( 解引用操作符 )
( 类型 )       强制类型转换
(1)!逻辑反操作(假的变为真,真的变为假)
int main()
{
	int flag = 0;
	if (flag == 0)
	{
		printf("hello\n");
	}
	if (!flag)
	{
		printf("hello\n");
	}
	return 0;
}

(2)&和*用于指针,&取地址;*是解引用操作符 (j间接访问),通过pa中存放的地址,找到指向的空间(内容)。

int main()
{
	int a = 0;
	int* pa = &a;

    *pa = 20;
    return 0;
}

(3)sizeof 不是函数,是操作符

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

	return 0;
}//J结果为40和4

(4)~ 按位取反

int main()
{
	int a = 0;
	printf("%d\n", ~a);
	//0000000000000000000000000000000补码
	//1111111111111111111111111111111补码
	//1111111111111111111111111111110反码
	//1000000000000000000000000000001原码
	return 0;
	//结果是-1
}
int main()
{
	int a = 13;
	//0000000000000000000000000001101
	// 想得到:
	//0000000000000000000000000011101
	a = a | (1 << 4);
	printf("%d\n", a);
	//要想复原
	//1111111111111111111111111101101
	a = a & ~(1 << 4);
	printf("%d\n", a);
	return 0;
}

(5)前置++和后置++

int main()
{
	int a = 1;
	int b = a++;//后置++,先使用再++
	printf("%d %d", a, b);
	return 0;
}// 2 1

int main()
{
	int a = 1;
	int b = ++a;//前置++,先++再使用
	printf("%d %d", a, b);
	return 0;
}// 2 2

(6)强制类型转换(少用)

int main()
{
	int a = (int)3.14;
	printf("%d", a);
	return 0;
}
//结果是3

六,逻辑操作符

&&逻辑与    ||逻辑或

&&操作符,左边为假就不用再算了

||操作符,左边为真就不用再算了

int main()
{
	int a = 5;
	int b = 0;
	if (a == 5 && b == 5)
	{
		printf("hello\n");
	}
	if (a == 5 || b == 5)
	{
		printf("hi\n");
	}
	return 0;
}
int main()
{
	
	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ && ++b && d++;
	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
	return 0;
	
}
//结果是1 2 3 4
int main()
{
	int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++||++b||d++;
	printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
	return 0;
}
//结果是2 2 3 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值