C语言九月七号

一、此次学习小结

1.操作符

1.1算术操作符  

需要注意除法,int型的除法是不能的得到小数的。计算时会把小数部分抹去。

1.2移位操作符

>>右移

<<左移

注意:只能对二进制的数进行移位操作运算

首先我们要了解二进制存储的一些知识。

00000000000000000000000000000001   -- 1
10000000000000000000000000000001   -- -1
二进制的开头一位是符号位,1是负数,0是正数
00000000000000000000000000000001  原码
00000000000000000000000000000001  反码
00000000000000000000000000000001  补码
正数的原码和反码和补码是相同的

10000000000000000000000000000001   原码
11111111111111111111111111111110   反码(原码的符号位不变,其他位取反)
11111111111111111111111111111111   补码(反码+1)

int a = 4;
a<<1;

左移,左边丢弃,右边补0(相当于*2)

a>>1;
右移,有两种方式
1逻辑右移  右边丢弃,左边补0
2算术右移  右边丢弃,左边补原符号位
一般采用算术右移

注意:不能移动负数

2.位操作符

&  按位与

|   按位或

^  按位异或

注意:位操作符只能运算整数

int a = 5;
int b = 3;
int c = a&b;
00000000000000000000000000000101   5
00000000000000000000000000000011   3
00000000000000000000000000000001   1

写出二进制位,按照上表写就是了。 

有一个面试题:

不创建临时变量,交换两个变量的值
#include<stdio.h>
int main()
{
    int a = 5;
    int b = 3;
    //可以用加法
    a = a+b;
    b = a-b;
    a = a-b;
    printf("%d %d\n",a,b)
    
    return 0;
}
这种有一个缺陷,当数字很大时,可能会截断
第二种是使用位操作符

位操作符支持交换律
3^3  ==0
5^3^3 ==5
5^5^3  ==3
这样就实现了交换


求二进制位中1的个数
num & (1 << i)

3.赋值操作符

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

主要是使代码更加简洁

4.单目操作符

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

主要注意sizeof它是一个单目操作符
因此   sizeof 10 和 sizeof(10)是一样的
还有++和--
a++ a-- 是先对a使用再加1或-1
--a ++a  先加1,在使用a

5.关系操作符

>
>=
<
<=
!=   用于测试“不相等”
==      用于测试“相等”

注意不要将判断的==写成=
因此建议if(11==a)这样写

6.逻辑操作符

&&     逻辑与
||     逻辑或

区分
1&2----->0
1&&2---->1

1|2----->3
1||2---->1
//一道有意思的题
#include <stdio.h>
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\nd = %d\n", a, b, c, d);
    return 0;
}
&&中,当有一个为假,那就不用判断后面了,返回0
||中,当有一个为真,那就直接返回1了

二、此次学习收货

感受:对于操作符的认识又增加了不少,了解得越多发现知道的越少

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Though even

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值