《学习记录7》C语言基本运算符详解

1、算术运算符 (双目运算符) :
+ 加法运算符 1+2 ( +1 +2 单目表示正负)
- 减法运算符 1-2 3-1 (-3 -4 单目表示正负 )
* 乘法运算符
/ 除法运算符 如果结果是一个整型那么小数部分将会被抛弃
% 求余(取摸)
单目:
++ 自加1
-- 自减1
//实例:
#include <stdio.h>

int main()
{
    printf("%d\n" , a ++ ); // 3 --》 4 // 由于++ 符号在操作数的右边,因此先取值,然后再自加
    printf("%d\n" , a ); // 4 由于上一条代码已经 把a 从 3 自加到 4 因此输出4
    printf("%d\n" , ++a ); // 5 由于 ++ 在a 的左边, 因此先自加然后再取值


    //拓展研究一下原理:
    // 小坑 与编译器的编译原理有关,不同的编译器所得的值可能会不同

    a = 5 ;
    printf("%d , %d , %d , %d \n" , a++ , ++a , a-- , --a );

    return 0;
}



1   提醒:
2   拓展一下关键字 volatile
注意:
求余运算符左右两边不允许出现浮点数, 只能是整型。
自加自减符号的使用要注意是 前缀 还是 后缀
如果是前缀则需要先自加或自减然后取值
如果是后缀则先取值, 然后在自加或自减
2、关系运算符 (双目运算符):
> 大于
< 小于 >= 大于或等于
<= 小于或等于
== 等于 --》 恒等于 ( = 一个等号称为赋值符号)
!= 不等于
注意:
判断两个数据或者两个表达式是否相等使用 == 两个等号
关系运算符所组成的表达式的值为 布尔值 4 > 5 --》 false
如果要表示有数的取值范围:
数学: 10 < a < 100
代码: a > 10 && a < 100
3、逻辑运算符:
&& 逻辑与 如果需要判断 两个或多个条件 并要求 同时成立 则可使用该逻辑运算符
|| 逻辑或 如果判断 两个或多个条件 中只要 有一个成立即可 ,可以使用逻辑或
! 逻辑反 把逻辑的真假进行对调(真变假 , 假变真)
注意:
在使用反逻辑与&& 的表达式中如果 从左往右第一个条件不成立 ,则后面的所有条件将不会判
断(不会运行)直接跳过。
#include <stdio.h>

int main()
{
     a = 100 , b = 250 ;
     if ( ++a && a < 100 && ++b && --a );
     //以上表达式中第一个条件 ++a 是成立的, 但是第二个条件不成立,导致后面的所有表达式无法运行
     //因此最终输出a = 101, b= 250

     return 0;
}

在使用逻辑或的表达式中,如果 从左往右第一个表达式为真 ,那么后面的表达式都 不会被执行


a = 100 , b = 250 ;
if ( a < 100 || ++b || --a );
//以上表达式中,表达式1 为假 , 因此会继续往后面判断,
//第二个表达式为真 , 因此将停止后面所有表达式的判断(不执行)
//输出结果 a = 100 , b = 251位运算符:

概念:
使用位运算进行操作的两个操作数实际上操作的是他们的二进制位。
~ 按位取反(单目)
#include <stdio.h>

int main()
{

int a = 3 ; //2 a->> 0000 0000 0000 0000 0000 0000 0000 0011
~a;         //->>1111 1111 1111 1111 1111 1111 1111 1100

printf("a:%d,%x\n" , a,a); //
printf("~a:%d,%x\n",~a,~a); //结果为-4,~a的符号位不变,取补码=反码加1


return 0;
}

& 按位与 (有0 得 0 ) 用来清零操作(双目)
    int a = 3 ;//a->> 0000 0000 0000 0000 0000 0000 0000 0011
    int b = 5 ;// b->> 0000 0000 0000 0000 0000 0000 0000 0101
    a&b;       //->0000 0000 0000 0000 0000 0000 0000 0001

    printf("a&b:%d\n" , a&b ); // 1

| 按位 或 (有1 得 1 ) 用来至 1 操作(双目)
     int a = 3 ;
     int b = 5 ;
     //a->> 0000 0000 0000 0000 0000 0000 0000 0011
     //b->> 0000 0000 0000 0000 0000 0000 0000 0101
     a|b->0000 0000 0000 0000 0000 0000 0000 0111

     printf("a|b:%d\n" , a|b ); // 7

^ 按位异或 (相反为1 )
     int a = 3 ;
     int b = 5 ;
     //a->> 0000 0000 0000 0000 0000 0000 0000 0011
     //b->> 0000 0000 0000 0000 0000 0000 0000 0101
     a^b;// 0000 0000 0000 0000 0000 0000 0000 0110

     printf("a^b:%d\n" , a^b ); // 6

按位同或 (相同为1,)
练习:
尝试使用异或运算符来交换两个数据的值(不借助第三个参数) << 按位左移
最快也最方便的交换方法!!!!!!!!!
#include <stdio.h>

int main()
{

    int a=3,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;
}

结果:

原理:

注意:
在左移的操作中,符号位没有参与移动(符号位不变)
<< 按位左移
>> 按位右移
在右移的操作中,符号位没有参与移动( 符号位不变

练习:
假设有个一个数据a = 4080 ,要求使用位操作完成一下功能:
把数据的第 8 位以及第 4 位设置为 0, 称为清零
把数据的第 20 位以及 23 位设置为 1, 称为置1
注意:位数是从0开始,不是从1开始!!!
实例:
法一:
#include <stdio.h> 

int main()
{

   int a = 4080 ; // 0000 0000 0000 1111 1111 0000
    // 把数据的第8位以及第4位设置为 0 
    int b = 0x11 ; //0x11=0001 0001;
    a = a ^ ( b << 4) ;
    printf("a : %d\n" , a );

    // 把数据的第 20 位以及 23 位设置为 1 
    int c = 0x09 ;//0x09= 1001
    a = a | (c << 20 ) ;
    printf("a : %d\n" , a );
    return 0;

法二:(工作常用)

位置零:a&=~(1<<i)

位置1:a|=1<<i;

   #include <stdio.h>

   int main()
   {
       int a=4080;

       a|=(1<<20)|(1<<23);
       a&=~((1<<4)|(1<<8));
       printf("%d",a);
    

       return 0;
   }

特殊运算符:
赋值符号 = :(左值 = 右值)
左值不可以上常量或者表达式
不可以直接对数组名字进行赋值
可以使用连续赋值
a = b = c = d = e = 100
a = b+n = c = d = e = 100 [ b+n 作为 c 的左值 错误 ] 复合运算符:
复合运算符只有10个,超出以下10个的部分都是非法的。他的作用增强程序的可读性,一定程
度地提高代码的运行效率。
         += *= /= %= -= 算数类
         &= |= ^= >>= <<= 位操作类

sizeof 运算符:(大规模程序上常用)
该运算符用来计算某一个 变量 或者 类型 的大小
该运算符看起来像一函数, 但是实际是一运算符  
该运算符的结果是一个 long 类型的, 因此在不同的系统下他的大小有差异(32位系统为4个字节,64位系统为8个字节)
1 sizeof ( long ) ; 该表达式得出 long 类型的大小
2 sizeof ( num ) ; 该表达式得出 变量 NUM 的大小
3 sizeof 运算符在计算某个变量的大小时候可以省略括号,
4 但是在计算某个类型时不允许省略括号
5 一般情况下我们都不会去省略他的括号
6
return 运算符:(大规模程序上常用)
作用:
返回、结束当前函数, 并携带一个数据退出。
一般情况下返回的 值的类型 应该与函数头中的返回值类型保持一致 。
注意:
该运算符在程序遇到的时候会终止 当前函数 的运行并退出。如果是 主函数 中遇到该运算符
则会直接 退出程序结束
三目运算符:(条件运算符)(大规模程序上常用)重要!!!!!!
(唯一一个拥有三个操作数的运算符)
语法:
1 表达式 1 ? 表达式 2 : 表达式 3 ;
解读:
如果表达式1 的值为真则取表达式2的值为最终值
如果表达式1 的值为假则取表达式3的值为最终值
实例:
#include <stdio.h>
int main()
{
    int a=5,b=6;
    //如果a>b,则max=a,否则max=b;
    int max=a>b?a:b;

    printf("%d\n",max);
    return 0;
    
}
     

 

运算符的优先级:
1 man operator

 

 

逗号表达式:(不建议这种写法,可阅读性很差)
概念:在一个表达式中用逗号分割出来多个表达式, 而该表达式最终的值为值 最后的表达式的
(表达式的运算 从左往右依次运算 )。
#include <stdio.h>

int main()
{

    int a = 10 ; 
    int b = 20 ; 
    int c = ( a++ , b++ , a+b ); // 表达式中 a 与b 都会分别自加然后该表达式的最终在为 32
    printf("a:%d\n" , a );
    printf("b:%d\n" , b );
    printf("c:%d\n" , c );

    return 0;
 }

好了,以上就是我对运算符·的基本了解,希望能对大家有所帮助!!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值