C语言程序设计(初识C语言后部分)

少年不惧岁月长,彼方尚有荣光在。

十八,操作符

1.操作符分类:

·算术操作符

·移位操作符

·位操作符

·赋值操作符

·单目操作符

·关系操作符

·逻辑操作符

·条件操作符

·逗号表达式

·下标引用、函数调用和结构成员

2.算术操作符

+   -   *   /   %

/:

1)整型的除法   1/2=0

2)浮点型的除法   1.0/2=0.5(1/2.0和1.0/2.0都执行小数除法)

%(取模操作符的两端必须是整数)

计算的是整除之后的余数

  

3.移位操作符   (移位操作符的操作数只能是整数,且移位操作符移动的是二进制)

关于二进制:

整数的二进制表示有三种

1)原码

2)反码

3)补码

正整数的原码,反码,补码相同;

负整数的原码,反码,补码是要计算的。

eg.   数字7(一个整型4个字节,32个比特位)

原码:(最高位为符号位,0表示正数,1表示负数)00000000000000000000000000000111

反码:00000000000000000000000000000111

补码:00000000000000000000000000000111

数字-7

原码:10000000000000000000000000000111

反码:11111111111111111111111111111111000 (符号位不变,其他位按位取反就是反码)

补码:11111111111111111111111111111111001 (反码+1就是补码)

整数在内存中存储的是补码。

·   <<   左移操作符:左边丢弃,右边补0

正数:

负数:(比正数多一步,需要求出原码)

·   >>   右移操作符

1)算术移位:右边丢弃,左边补原符号位

2)逻辑移位:右边丢弃,左边补0

正数:

负数:

使用哪种右移取决于编译器,VS使用算术右移。

(警告:对于移位操作符,不要移动负数位,这个是标准未定义的。)

4.位操作符 (操作数必须是整数)

· & :按(二进制)位与   同时为1结果才为1,否则结果为0

· | :按(二进制)位或   同时为0结果才为0,否则结果为1

· ^ :按(二进制)位异或    相同为0,相异为1

一道相关的面试题:不能创建临时变量(第三个变量),实现两个数的交换

1.这种方法可能会存在溢出现象,有一定潜在的问题

#include <stdio.h>
//不能创建临时变量(第三个变量),实现两个数的交换
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;
}

2.(^只适用于两个整数之间进行交换)

^:

1)两个相同的数字按位异或的结果为 0 --->a^a=0

2)  0按位异或一个整数的结果为该整数  --->0^a=a

3)  按位异或支持交换律   ---> 3^3^5=5   3^5^3=5

#include <stdio.h>
int main()
{
	int a = 3;
	int b = 5;

	printf("交换前:a=%d b=%d\n", a, b);
	a = a ^ b;//a=3^5
	b = a ^ b;//b=3^5^5=3
	a = a ^ b;//a=3^5^3=5
	printf("交换后:a=%d b=%d\n", a, b);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值