C语言:操作符(上)

目录

一、算数操作符

二、移位操作符

补充:二进制(基础)

1).正数

2).负数

移位操作符

左移操作符

右移操作符

三、位操作符

四、单目操作符

五、逗号表达式

一、算数操作符

+    —    *    /    %

对于 / ,两边都是整数,则结果为整数;两边只要有一个浮点数,则结果为小数

二、移位操作符

<<    左移操作符

>>    右移操作符

注:移(2进制)位操作符的操作数只能是整数

补充:二进制(基础)

整数的二进制表示形式有3种:原码,反码,补码

按照一个数的正负,直接写出它的二进制序列得到的就是原码

1).正数

10的二进制表示形式为1010,12=(1*2^3)+(1*2^2)+(0*2^1)+(0*2^0)

一个整型占4个字节(32bit)

在创建变量时,一个整型的形式应写成32位

正数的原码,反码,补码是相同的

int  a  =  10; 

原码——00000000000000000000000000001010

反码——00000000000000000000000000001010

补码——00000000000000000000000000001010

2).负数

正数的原码,反码,补码需要经过计算

int  b  =  -10;(第一个位置是符号位,0—正,1—负)

原码——10000000000000000000000000001010

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

反码——11111111111111111111111111111110101

              反码加1,就是补码

补码——11111111111111111111111111111110110

(补充:若变量为无符号数(unsigned int),则负数的符号位不会被当作符号位,而是正常数字)

移位操作符

内存中存储的是:补码的二进制

参与移位的,移动后的都是补码,需要进行计算得到结果

左移操作符

正数,负数——左边丢弃,右边补0

num<<1的结果是移位之后的效果,这个过程中num不变

右移操作符

1. 逻辑右移:左边用0填充,右边丢弃

2. 算术右移:左边用原该值的符号位填充,右边丢弃(多数)

(由编译器决定方式)

-1的补码为11111111111111111111111111111111

三、位操作符

对各个二进制位

&      按位与——有0则为0,都为1则为1

|       按位或——有1则为1,都为0则为0

^      按位异或——不同为1,相同为0

~      按位取反——各个位取反

注:操作数只能是整数(也是以内存所存形式(补码)进行计算)

 例题:不能创建临时变量,实现两个整数的交换。

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

解析

 

注:异或操作符支持交换律(3^4^5=3^5^4)

四、单目操作符

!    ++    --    &    *    +    -    ~    sizeof 

!    逻辑非运算符

若表达式a为真,则!a为假;反之相同

 补充:布尔类型(C99)

C99标准引入了_Bool类型,并且在头文件<stdbool.h>中定义了bool宏,它是_Bool的别名,同时定义了true和false宏,分别代表1和0,方便进行布尔值的操作和判断。

 布尔函数,只返回ture或false

bool is_leap_year(int y)
{
	if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
		return true;
	else
		return false;
}

++、--  前置:先赋值,再运算

            后置:先运算,再赋值

&         取地址

*          间接访问操作符(解引用操作符)

五、逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式

从左向右依次执行,整个表达式的结果是最后⼀个表达式的结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值