工程的零件--操作符(详解)

目录:  一操作符定义      二操作符分类       三详解操作符       四逗号表达式         五. 下标引用、函数调用和结构成员      六 隐式类型转换整型提升

   一 .定义

指令系统的每一条指令都有一个操作符,它表示该指令应进行什么性质的操作。不同的指令用操作符这个字段的不同编码来表示,每一种编码代表一种指令。(操作符_百度百科 (baidu.com)

    二.分类:   

 1.算术操作符       2.移位操作符       3.位操作符       4.赋值操作符       5.单目操作符        6.关系操作符       7.逻辑操作符      8.条件操作符      9三目操作符;

    三.详解:

          1.算术操作符 :+  -  *   /     %(取余数);

            (1) 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。

           (2) 对于 / 操作符如果两个操作数都为整数,执行整数除法(剩下的除不尽的只会去掉)。而只要有浮点数执行的就是浮点数除法。

            (3) % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

          2.位移操作符: <<(左移操作符,默认一位可以更改)      >>(右移操作符,默认一位可以更改     分为算数位移,逻辑位移   );(注意只能用于整数)(警告⚠ : 对于移位运算符,不要移动负数位,这个是标准未定义的。)

    理解(建议先看补充再看理解):

              左移或者右移指的是移动该变量二进制形式(电脑只会识别记住二进制数据);

              左移就是该数据的二进制序列向左移动,后面的空位补充0;

              右移就是该数据的二进制序列向右移动,前面面的空位补充符号位数字(这是逻辑位移)   算数位移则是补充0(算数位移默认正数);

使用:

            a本身不会发生变化,除非你再次给a赋值;

   补充:      (1)因为电脑只会识别记住二进制数据,so只有0 1 ,同时0代表假,1代表真。

                    (2)在二进制数据首位的是符号位,符号位中0代表正数,1代表负数 。

                    (3)系统一般默认为有符号位(signed)的即二进制首字符有0 1之分,可用(unsigned)表示无符号位即为二进制首字符为0确定的

                    (4)数据二进制的长度取决于它属于的数据类型。

                    (5)计算数据类型化成二进制的长度方法:8 乘以  字节总数;

                    (6)把二进制化成十进制方法:举例子讲解,x进制的次方从0开始,数字最大值=x(进制)-1;八进制(ddd),和16进制(xdd)同理;

 例子:00000001:代表的是char类型的变量,值为1;

            1000000000000111:代表的是short类型的变量,值为-(1*2^2+2^1*1+2^0*1)=-7

            00000000000000000000000000000010代表的是int或者long或者float类型的变量,值为(2^1*1+2^0*0)=2 或者2 或者2.000...;    

                      同时可知char最大是128(有符号位的是这样),剩下还有负数。

 

 

公式是有符号位的2^(n个字节-1);否则不能用出错。

但是对于无符号位的:

 

                     (7)当输入数据并储存于a变量时,数据会自动改变成二进制,但是输入的是原码,但是他还会转化成反码,最后转化成补码并储存。

原码---(符号位不变其他位,按位取反)-->反码---(加1)--->补码

例子:11原码:00000000000000000000000000001011;

              反码:11111111111111111111111111110100;

               补码:11111111111111111111111111110101;

          3.位操作符(双目操作符):&(按位与)       |(按位或)        ^(按位异或)  ; (三者仅运用于整数,并且二者只作用于该变量的二进制序列)

   (1)&:两个同类型变量二进制一 一对应序列同几为几,相异取0合成一个新的二进制序列;

   (2)|:两个同类型变量的二进制序列同几为几,相异取1构成新二进制序列;

   (3)^:使某些特定的位翻转,或者值的反转;如果各个二进制位的两个值不相同,则异或结果为1。 如果各个二进制位的两个值两个值相同,异或结果为0

例如不用第三个变量来使两个变量数值反转;a=a^b;b=a^b;a=a^b;(但是不建议用,效率低,可读性差,只能作用于整数……)

          4.赋值操作符: =(可以给变量重新赋值);

            复合赋值符 +=    -=      *=    /=   %=   >>=     <<=    &=    |=     ^=  ;(好处在于简洁)

理解:x+=1则为x等于x加1,x<<=2则为x向左移两位再赋值给x…………其他的复合赋值同理,

          5.单目操作符:(单目操作符则是与操作数有关,双目则是两个,三目则是三个)

   (1)!      逻辑反操作,就是某变量的符号位不变其他位按位取反

   (2)-      负值;     +    正值;表述数字的正负

   (3)&    取地址;     *   间接访问操作符(解引用操作符);这两个操作符是相关的,用于指针

例如:

#include<stdio.h>
int main()
{int a=10;
int*pa=&a;
printf("%d  \n  %d",a,*pa);
return 0;
}

这两个的打印结果相同。(这次略过,下次将详解指针内容)

   (4)sizeof      操作数的类型长度(以字节为单位)也可以用于求字符串个数int sz=sizeof(arr)/sizeof(arr[0])    ;不用strlen(使用strlen需要引用新的头文件#include<string.h>)它还可以求变量(类型)所占空间的大小。

  (5)~    对一个数的二进制按位取反 

  (6)--   前置、后置-- 和++   前置、后置++

前置则为先操作再使用,后置则为先使用再操作;

例子:

  int x = a++;
    //先对a先使用,再增加,这样x的值是10;之后a变成11;
    int y = a--;
    //先对a先使用,再自减,这样y的值是11;之后a变成10

    (7)(类型)    强制类型转换  当一开始设置的变量类型在某处不符合要求时,在此处该变量的前面加上(想要的数据类型)进行转换。

          6.关系操作符:   >    >=     <    <=    !=(不相等)    == (相等)

尤其注意:在编程的过程中== 和=不小心写错,导致的错误。

          7.逻辑操作符:&&逻辑与 ;    ||逻辑或

 

&&左边为假就不执行右边     ||左边为真就不执行右边。

          8.条件操作符(三目操作符):x?y:z  判断x,对则y否则z

          四.逗号表达式: 逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行,  整个表达式的结果是最后一个表达式的结果。

       五.下标引用、函数调用和结构成员:(指数组)            

        (1).[] 下标引用 arr[]代表数组          arr[1]代表的时数组成员

        (2).( ) 函数调用操作符     game()

      六. 隐式类型转换--->整型提升(C的整型算术运算总是至少以缺省整型类型的精度来进行的。 为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,

简而言之就是为了方便使用变量,就把非int类型长度的变量提升到int一样的长度,正数和无符号位的用0在前面补充,负数前面全是1

      同时长的变短的就是截断

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值