• 【C语言】操作符详解(1)


    ©作者:凡人编程传
    ©系列:C语言初阶(适合小白入门)
    ©说明:以凡人之笔墨,书写未来之大梦

    在这里插入图片描述

    前言

    这一章节,我们主要来认识C语言中的操作符。让他们成为我们编程时候趁手的工具,废话不多说,咱们直接进入正题.

    算数操作符

    算数操作符算是C语言中简单的操作符了,就是大家在生活中经常见到的加减乘除,哦不,还多了一个叫%的玩意儿。
    值得注意的是C语言中的除号是\ ,而乘号是*。

    单独说一下这个取模的操作符,因为他的注意事项比加减乘除多
    1.当被取模数小于取模数的时候,运算的结果还是被取模数. 如:3%12还是等于3.
    因为这里的取模运算实质上就是除法运算,只不过是除法得到商后,取余数罢了。这里的3%12,就等于3/12,商0,余数为3.
    .2.取模运算的结果的正负取决于被取模数的正负,如-10%3的结果为-1,而10%-3的结果是1,-10%-3还是负1.

    移位操作符

    位操作符,顾名思义移动的是位,移动的是什么位?想想计算机中最多的是什么位?当然是二进制位了。10进制的1转换成32个二进制位就是:00000000 00000000 00000000 00000001

    原/反/补码

    讲移位操作符之前,咱们必须先了解什么事原码、反码、补码,这样有助于我们更好了解移位操作符。(这里只讲解整数在内存中的存储形式,浮点数的存储形式在后面的C语言高阶专栏中会讲到)

    1. 原码::整数的原码就是十进制位转换成二进制的序列,(这里再补充一点,二进制最左边的第一位就是符号位,如果符号位是0,代表这个数是正数,符号位是1,代表这个数是负数),例:-1的原码就是:
      在这里插入图片描述

    2. 反码:即除了符号位,其他位0变1,1变0.而10的反码就是:
      在这里插入图片描述

    3. 补码:反码+1
      在这里插入图片描述

    .注意:
    1.数字在内存中存储的都是补码,但是要从内存中拿出来打印的时候,就要通过补码算出原码打印,也就是说最终要把二进制转换成十进制打印的是那个数的原码的二进制。
    2.正整数的原、反、补三码相同,即原码=反码=补码,补码=反码=原码。只有负数才需要上面这样的过程去求原、反、补码。

    左移

    左移操作符就长这幅模样 << ,左移,移这个字代表要移动二进制位,左这个字代表向左边移动二进制位。很好理解吧,有了这个概念咱们就知道怎么移动了
    例如我们要把1这个数向左移动1位

    #include
    int main()
    {
    	int a=1;
    	int b=a<<1;
    	printf("b=%d",b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    移位过程:
    在这里插入图片描述
    故而转换十进制打印2

    运行结果
    在这里插入图片描述

    注意:进行移位操作的时候并不会真正改变a的值,移位完成并赋值给b后a还是1,具体原因暂时不讲。

    如:
    在这里插入图片描述

    右移

    右移和左移就有一定的区别了,不过区别也不是很大。就是分了算术右移和逻辑右移两个。

    逻辑右移

    逻辑右移和左移差不多,他是向右边移动,溢出位丢弃,然后缺失位补0.跟左移比起来就是方向不同。

    例如咱们要把4这个数向右移动1位

    #include
    int main()
    {
    	int a = 4;
    	int b = a >> 1;
    	printf("b=%d\n", b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    移位过程:
    在这里插入图片描述
    故而转换成十进制就是2

    运行结果:
    在这里插入图片描述

    算术右移

    算术右移就有区别了,但是也仅仅是一个。也就是算术右移根据符号位来决定缺失位是补0还是1,如果符号位是0那缺失位补0,反之,若是1就补1.

    为了观察区别,咱们这次用-1这个负数来可以更好的看出区别.-1向右移1位

    #include
    int main()
    {
    	int a = -1;
    	int b = a >> 1;
    	printf("b=%d\n", b);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    故而转十进制还是-1

    运行结果:
    在这里插入图片描述

    补充注意事项

    不要乱移动二进制位,比如说a<<0和a>>0这种写法语法是没有规定的,同理a<<-1和a>>-1这种也是没规定的,你移动负数位是想往反方向移动吗?那样直接用<<对应的>>或>>对应的<<不就好了吗。所以不要乱移动二进制位

    结言

    好了,今天的内容就到这里。下一节我们讲解操作符的重难点位操作符,敬请期待!

  • 相关阅读:
    OSG笔记:对线求交失败
    Python 中如何编写类型提示
    Java真的不难(五十一)SpringBoot使用EasyExcel实现导出
    【VSCode】Windows 下搭建 C++ 环境
    Celery笔记六之worker介绍
    Springboot2.x开启跨域配置详解
    k8s-master 高可用
    【Altium Designer-画板指南】
    制作linux系统内部yum源仓库
    MySQL事务详解
  • 原文地址:https://blog.csdn.net/apple_61439616/article/details/126252198