精华内容
下载资源
问答
  • C语言--运算符

    2020-02-01 16:41:17
    文章目录C语言 运算符一、概念1.1运算符1.2操作数1.3表达式1.3优先级1.4结合性二、运算符的分类2.1赋值运算符2.2算数运算符2.3关系运算符2.4按位运算符2.5逻辑运算符2.6自增自减运算符2.7三目运算符2.8复合赋值...

    C语言 运算符

    一、概念

    1.1运算符

    具有一定的运算规则的符号,对数据的一种操作 2+3- 3*5= 5

    1.2操作数

    运算符要操作的数据就是操作数

    1.3表达式

    运算符跟操作数组合的式子就叫做表达式

    1.3优先级

    不同运算符组合在一起使用的时候,对数据的先后处理顺序

    1.4结合性

    在同一个优先级的情况下,对数据处理的先后顺序

    二、运算符的分类

    2.1赋值运算符

    赋值运算符符号:=
    a=b;
    原理: 将右边的数据赋给左边的变量(左边必须是变量)
    注意: 数据在做赋值运算的时候,要注意数据类型是一样的
    如果两边的数据类型不一样,此时就会发生数据类型的转换
    优先级 : 比逗号运算符的优先级高
    结合性 :从右到左

    2.2算数运算符

    算数运算符符号: + - * / %(求余/取模)
    除法 /
    a) 当除号两边都是整数的时候,结果自动取整
    10/3=3
    b) 当除号两边只要有一边浮点型数据的时候,结果会取到准确值
    10.0/3=3.333333
    注意:验证的时候,注意数据类型的转换,结果用浮点型数据类型的变量接收

    求余 %
    a)原理:% 运算符两边必须是整数
    如果不是整数,必须做数据类型的转换
    b)用途: 用来做位数的分离

    ​ 123
    ​ 123%10 结果是3
    ​ 123/10%10结果是2
    ​ 123/100结果是1

    d)优先级:* / % 高于 + -
    算数运算符的优先级高于赋值运算符

    e)结合性:从左往右

    2.3关系运算符

    关系运算符符号: > < >= <= != ==

    对于数据:只要是非0值都是真值

    ​ a)由关系运算符组成的式子,叫做关系表达式
    ​ b)关系表达式的结果只有两种,0 或 1(逻辑结果真)
    ​ c)形式: 表达式1 关系运算符 表达式2
    ​ 假如: 2<3
    ​ d)注意:判断两个表达式是否相等,用 ==

    e)如果表达式里面有运算符的时候,注意,优先级,先执行优先级高的

    ​ f)优先级: > < >= <= 高于 != ==
    ​ 从上往下,优先级降低:
    ​ 算数运算符的优先级
    ​ 关系运算符
    ​ 赋值运算符
    ​ g) 结合性:从左往右
    ​ h) 用途:用在循环语句,条件语句,进行判断

    2.4按位运算符

    按位运算符符号: &(按位与) ^(按位异或) |(按位或) ~(按位取反)
    <<(按位左移) >>(按位右移)

    a)说明:在做按位运算的时候,需要将数据转换成二进制,再进行相关的运算
    数据是以补码的形式保存在内存中的:
    对于正数来说,它的补码就是它的原码
    对于负数来说,它的补码就是它原码除了符号位之外,其他位取反加1
    注意:凡是做按位运算的时候,必须将数据转换成二进制来进行运算
    b)按位与 : &
    形式: 表达式1 & 表达式2
    规则: 全1为1,有0为0
    c)按位异或: ^
    形式: 表达式1 ^ 表达式2
    规则: 相同为0,相异为1
    d)按位或 : |
    形式: 表达式1 | 表达式2
    规则: 全0为0,有1为1

    e)按位取反: ~
    规则:0变1,1变0
    注意: 按位取反是单目运算符

    补充:单目运算符跟双目运算符的区别:
    单目运算符:根据操作数的数目来区分
    如果只有一个操作数:单目运算符
    如果有两个操作数:双目运算符
    如果有三个操作数:三目运算符

    例子:

    int a=0x34;       
    0000 0000 0000 0000 0000 0000   0011 0100
    ~a;  
    1111 1111 1111 1111 1111 1111  1100 1011
    FFFFFFCB
    char b=0x34
    ~b;
    

    f)按位左移 <<
    规则:整体左移,高位溢出,低位补零
    方法:整体左移的时候,相对于乘以2,(必须符合数据的取值范围)
    例:b左移n 相对于b*2^n
    g)按位右移 >>
    规则:整体右移,低位溢出,高位位补零
    方法:整体右移的时候,相对于除以2,(必须符合数据的取值范围)

    优先级:~ 高于 << >> 高于 & 高于 ^ 高于 |
    结合性:单目运算符:从右往左
    双目运算符:从左往右

    2.5逻辑运算符

    逻辑运算符符号:&& || !

    1)逻辑与:&&
    形式: 表达式1 && 表达式2
    原理: 两个表达式的结果都是真值,则整体表达式的结果就是真值
    注意:如果表达式1的结果是真值,则再去判断表达式2的结果
    如果表达式1的结果是假值,不会去判断表达式2

    2)逻辑或:||
    形式: 表达式1 ||表达式2
    原理: 两个表达式的结果有一个为真,则整体表达式的结果就是真值
    注意: 如果表达式1的结果是真值,则不会再去判断表达式2的结果
    如果表达式1的结果是假值,则再去去判断表达式2

    3)逻辑非:!
    形式:!表达式1
    原理:真变假,假变真
    注意:逻辑非 是单目运算符

    4)优先级: ! 高于 && 高于 ||
    结合性: 单目运算符:从右往左
    && || : 从左往右

    2.6自增自减运算符

    自增自减运算符符号: ++ –
    原理:本身会自增1
    分类:分为前置跟后置
    前置:int a; ++a 在变量的前面
    规则:变量先自增,后使用,
    a=1, b=++a;
    后置:a++ 在变量的后面
    规则:变量先使用后自增
    注意:只有变量才会发生自增自减,
    不管是前置还是后置,变量最终都会加1
    对于前置,变量先加在使用,int a, b=++a ;
    对于后置,变量先使用在自增,变量只有在一条语句结束之后才会发生自增

    b=a++;  {b=a; a=a+1} a=1
    b=(a++)+(b=a);  //b=1+1   a=2
    

    优先级:单目运算符
    结合性:从右往左

    补充:1)自增,自减,在printf函数里面,结合性是从右往左
    printf(“a = %d b = %d\n”,a++, ++a); 先计算后面的,在计算前面的

    2)在前置和后置同时出现的时候,前置会影响后置,后面在出现前置和后置的时候就不会发生变化了。
    前置和前置同时出现的时候,也会受影响
    解释:不同的编译器,所造成的影响是不同的,根据编译器而定

     b=(a++)+(++a)+(a++)+(++a)+(a++);
    //1+2+2+3+3=11  实际结果是12
     //a=6
    
    d=(++c)+(++c);
    //2+3    实际结果是6
    //c=3
    

    2.7三目运算符

    三目运算符符号 ?:
    形式:(条件表达式)?表达式1:表达式2
    原理:先判断条件表达式,如果条件表达式为真,则整体表达式的结果就是表达式去的结果;如果条件表达式为,则整体的表达式的结果就是表达式2的结果
    本质: 三目运算符
    优先级:单目运算符 高于 双目运算符 高于 三目运算符
    结合性:从左往右

    2.8复合赋值运算符

    复合赋值运算符:
    形式: += -= /= …
    原理:a+=b; a=a+b
    注意:!= >= <=
    运算符本身带有赋值运算符的不是复合赋值运算符
    优先级:跟赋值运算符的优先级一样
    结合性:从左往右

    2.9逗号运算符

    逗号运算符:
    形式:(表达式1,表达式2,…表达式n);
    原理:先计算表达式1,然后在计算表达式2,一直到表达式n,
    最终整个表达式的结果是表达式n的结果
    优先级:最低
    结合性:从左往右

    三、运算符优先级(运算顺序)排序

    运算符优先级的高低,从上往下,优先级依次降低

    括号 : () {} [] . ->

    单目运算符 : ~ ! ++ –

    指针运算符 : * &

    算数运算符: * / % + -

    按位运算符: << >>

    关系运算符:> < >= <= != ==

    按位运算符:& ^ |

    逻辑运算符:&& ||

    三目运算符: ?:

    (符合)赋值运算符 : = += -= %= …

    逗号运算符 : ,

    展开全文
  • C语言-运算符

    2019-09-21 17:29:26
    运算符是指定编译器执行特定的...按优先级从高到低排序,空行优先级下降一级别: () 圆括号 [] 下标 -> 指针型结构成员 . 结构成员 /* 单目、右结合运算 */ ! 逻辑非 ~ 位非 ++ 自增 -- 自减 - ...

      运算符是指定编译器执行特定的算术或逻辑操作的符号。

    按优先级从高到低排序,空行优先级下降一级别:

    ()       圆括号
    []       下标
    ->       指针型结构成员
    .        结构成员
    
    /* 单目、右结合运算 */
    !        逻辑非
    ~        位非
    ++       自增
    --       自减
    -        取负
    (类型)    类型转换
    *        取内容
    &        取地址
    sizeof   求数据类型或者表达式的长度
    
    /* * 双目、左结合运算 * */
    */%        求余
    +-<<       左移
    >>       右移
    <        小于
    <=       小于等于
    >        大于
    >=       大于等于
    ==       等于
    !=       不等于
    &        位与
    ^        位异或
    |        位或
    &&||?:       条件运算 //三目、右结合运算
    
    =        赋值运算(+=、-=、*=、/=、%=、>>=、<<=、&=、^=、|=)
    ,        逗号运算

    转载于:https://www.cnblogs.com/xenostudio/p/6496961.html

    展开全文
  • 今天带给大家的是一道中国台湾某著名cpu生产公司的面试题。 储备知识 要看懂今天的代码需要一点储备知识。...、+ 的优先级排序 ~ 大于 + 大于 >> 优先级越高的运算符越先执行 题目及分析 ...

    今天带给大家的是一道中国台湾某著名cpu生产公司的面试题。

    储备知识

    要看懂今天的代码需要一点储备知识。

    // C语言的符号意义
    ~ 按位取反 例如 ~(111b)= (000b)
    >> 按位右移 例如 (0011b)>>2 = (0000b)
    ~、>>、+ 的优先级排序 ~ 大于 + 大于 >> 优先级越高的运算符越先执行
    

    题目及分析

    话不多说上代码:

    #include <stdio.h>
    int main()
    {
    unsigned char a = 0xa5;
    unsigned char b = ~a>>4+1;
    printf("b=%d
    ",b);
    return 0;
    }
    

    你算出的结果是什么?

    估计大部分的朋友算出的结果都是2。

     

     

     

    初步分析

    让我们一起来看一下,大致分析这个代码,可以发现这个代码考察了两个知识点:

    一是数据类型转换问题

    二是运算符的优先级问题

    unsigned char b = ~a>>4+1;
    

    上面这行代码,~的优先级最高,首先肯定是对a进行按位取反,然后是+的优先级较高,所以执行4+1 =5,最后执行右移操作。

    因此上面的代码等价于:

    unsigned char b = [(~a)>>(4+1)] = (-a)>>5 ;
    

    也就是先对a进行逐位取反,~0xa5 = ~ (1010 0101b) = 0101 1010b = 0x5a

    再右移5位得到0x2。结果算出来是2?

    让我们直接运行代码来查看结果:

     

    C语言

     

    怎么回事?答案并不是预期中的2,b忽然等于250!,这是为什么呢?

     

    某著名公司的C语言面试题,看看你是否能搞定?

    C语言

     

    隐式数据类型转换和整值提升

    unsigned char b = ~a>>4+1;
    

    让我们再来仔细观察上面这行代码,发现出现了不同类型之间的运算:a的数据类型是char,4和1的数据类型没有指定,c语言编译器会默认其为int类型。

    相信大家都知道,在C语言的运算过程中,如果运算符两边的数据类型不一致,编译器会自动进行隐式数据类型转换。

    这种数据类型转换总体来说比较复杂,但是总体遵循这个原则:尽量避免数据精度损失

    上面的原则意味着什么呢?

    如果运算符两边的数据类型不一致,编译器总是尽量往较宽的数据类型进行转换。

    如果计算过程中的计算数不是浮点数,那么他们肯定都是整型,编译器一般会将所有小于int类型宽度的数据类型提升到int,这种现象被称为“整值提升

     

    进一步分析

    unsigned char b = ~a>>4+1;
    

    知道了整值提升,让我们再来重新看看上面这行代码:

    a是unsigned char,数据宽度小于 int,所以编译器在对a进行按位取反操作之前,会先将a的数据类型提升至int。

    不同机器上,int的数据宽度不同,在我的机器上int的大小是4个字节。

    因此将a进行数据类型转换后,a = 0x 00 00 00 a5 ,按位取反以后就是 ~a = 0x ff ff ff 5a,然后再按位右移5位(高位自动补0),得到的就是0x07 ff ff fa ,在将该数值复给b的时候,因为b的数据类型是 char,只有一个字节,因此会发生数据截断,只有最低位字节保留下来了,也就是 0xfa = 250。

     

    总结

    通过这道题,大家可以发现,如果对c语言的隐式数据类型转换不熟悉,就很容易上套。

    另外,运算符的优先级还是比较难记的,建议还是使用括号明确执行顺序

    展开全文
  • C语言编程要点

    2017-09-18 00:10:37
    第1章 C语言 8 1.1 什么是局部程序块(local block)? 8 1.2 可以把变量保存在局部程序块中吗? 9 1.3 什么时候用一条switch语句比用多条if语句更好? 9 1.4 switch语句必须包含default分支吗? 10 1.5 switch语句的...
  • 谭浩强C语言设计第三版.pdf

    热门讨论 2008-12-16 11:06:25
    很好用的东西很经典的一本C教程,TKS这算是谭浩强C语言设计比较新的版本了!目录很详细,使用很方便目录 ... 附录A c语言运算符的优先级与结合性  附录B C99关键字  附录C ASCII码表  附录D 常用C语言标准库函数
  • C语言的科学和艺术.pdf

    热门讨论 2012-01-19 14:09:05
    本资源包含《C语言的科学和艺术(英文版)》.pdf和《C语言的科学和艺术(中文版)》.pdf两本书,有兴趣的朋友可以进行对照阅读。 《C语言的科学和艺术》,原名《The Art and Science of C: A Library-Based Introduction...
  • 中间语言的形式 常见的中间语言的形式: 后缀式(逆波兰式) 三地址代码 三元式 ...C语言中运算符优先级排序如下: 优先级【高到低】: 分为优先级15级: 1、圆括号【()】、下标运算符【[]】...

    中间语言的形式

    常见的中间语言的形式:
    后缀式(逆波兰式)
    三地址代码

    • 三元式
    • 四元式
    • 间接三元式

    后缀式

    又称逆波兰表示法,把运算量(操作数)写在前面,把算符写在后面(后缀)。
    如:a+b 写成 ab+
    a+b * c 写成 abc * +
    后缀式要注意的是运算符号优先级
    C语言中运算符优先级排序如下:
    优先级【高到低】:
    分为优先级15级:

    1、圆括号【()】、下标运算符【[]】、分量运算符的指向结构体成员运算符【->】、结构体成员运算符【.】;

    2、逻辑非运算符【!】、按位取反运算符【~】、自增自减运算符【++】【 --】、负号运算符【-】、类型转换运算符【(类型)】、指针运算符和取地址运算符【*】【&】、长度运算符【sizeof】;

    3、乘法运算符【*】、除法运算符【/】、取余运算符【%】;

    4、加法运算符【+】、减法运算符【-】;

    5、左移动运算符【<<】、右移动运算符【>>】;

    6、关系运算符【< 】【>】【<=】【 >= 】;

    7、等于运算符【==】、不等于运算符【!=】;

    8、按位与运算符【&】;

    9、按位异或运算符【^】;

    10、按位或运算符【|】;

    11、逻辑与运算符【&&】;

    12、逻辑或运算符【||】;

    13、条件运算符【?:】;

    14、赋值运算符【=】【/=】【*=】【%=】【+=】【-=】【<<=】【>>=】【&=】【^=】【|=】;

    15、逗号运算符【,】
    转自百度百科 运算符

    题型:求后缀式

    a+b*(c+d/e)>f
    后缀式:abcde/+*+f>
    (如果加上更多种类运算符就更需要记住它们的优先级)

    三元式

    带有三个记录域:op(操作符),arg1(左操作数),arg2(右操作数)
    (op,arg1,arg2)
    如:y+1
    (+,y,1)
    间接三元式
    将按运算的先后顺序列出有关三元式在三元式表中的位置
    如:x[i] :=y
    (0) (=[ ],x,i)
    (1) (:=,(0),y)
    x := y[i]
    (0) ( [ ]=,y,i)
    (1) (:=,x,(0))

    四元式

    带有四个记录域:op,arg1,arg2,result
    如:y:=x+1
    (1)(+,x,1,T)
    (2)(:=,T,-,y)

    翻译模式

    布尔表达式的翻译

    优先级:not>and>or
    A or B : if A then true else B
    A and B : if A then B else false
    not A : if A then false else true

    作为条件控制的布尔表达式

    if E then S1 else S2,作为转移条件的布尔表达式E,可赋予它两个出口,一个为“真”出口,出向S1;一个为“假”出口,出向S2

    题型:用四元式实现三地址代码

    (jnz,a,-,p)表示if a goto p
    (jrop,x,y,p)表示if x rop y goto p
    rop为操作符,例 j-
    (j,-,-,p)表示 goto p

    例:while (a<b) do
    if (c<d) then x:=y+z

    //a<b判断语句while循环,true则跳到(3)
    (1)( j< , a , b ,(3))
    //判断语句为false则跳到(8)结束
    (2)( j , - , - , (8) )
    //c<d判断语句,为true跳到(5)
    (3)( j< , c , d , (5))
    //判断语句为false则跳到(1)
    (4)( j , - , - , (1))
    //y,z相加赋值给T
    (5)( + , y , z , T )
    //T的值赋值给x
    (6)( := , T , - , x )
    //运行完then后的语句跳转回while循环(1)
    (7)( j , - , - , (1))
    (8)下一条语句

    展开全文
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    就算括号不行,操作符优先级是否能够控制计算顺序呢? 3.6 可是&&和||操作符呢?我看到过类似while((c=getchar())!=EOF&&c!='\n')的代码…… 3.7 是否可以安全地认为,一旦&&和||左边的表达式已经决定了整个...
  • 学习指针是学习C语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握C语言的一个标志。同时, 指针也是C语言中最为困难的一部分,在学习中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到...
  • 2.8 操作符和标点符号 2.9 操作符的优先级和结合性 2.10 增值操作符和减值操作符 2.11 赋值操作符 2.12 例子:计算2的乘方 2.13 c系统 2.13.1 预处理器 2.13.2 标准函数库 2.14 总结 2.15 练习 第3章 基本数据类型 ...
  •  3.4.2 符号常量 29  3.5 总结 31  3.6 问与答 32  3.7 作业 32  3.7.1 小测验 32  3.7.2 练习 32  第4天课程 语句、表达式和运算符 34  4.1 语句 34  4.1.1 空白对语句的影响 34  4.1.2 创建空...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    就算括号不行,操作符优先级是否能够控制计算顺序呢? 35  3.6 可是&&和||操作符呢?我看到过类似while((c = getchar()) != EOF && c != '\n')的代码…… 35 3.7 是否可以安全地认为,一旦&&和||左边的表达式...
  • 书中专门为学生提供了一个用C语言编写的实习项目,包括前端和后端设计,学生可以在一学期内创建一个功能完整的编译器。  本书适用于高等院校计算机及相关专业的本科生或研究生,也可供科研人员或工程技术人员参考。...
  • 3.4.2优先级指导 3.4.3语法和语义 3.5错误恢复 3.5.1用elTOI‘符号恢复 3.5.2全局错误修复 程序设计:语法分析 推荐阅读 习题 第4章 抽象语法 4.1语义动作 4.1.1 递归下降 4.1.2 Yacc生成的分析器 ...
  • 现代编译原理C语言描述-虎书中文版

    热门讨论 2010-04-11 16:47:52
    3.4.2 优先级指导 50 3.4.3 语法和语义 53 3.5 错误恢复 54 3.5.1 用error符号恢复 54 3.5.2 全局错误修复 55 程序设计:语法分析 57 推荐阅读 58 习题 58 第4章 抽象语法 62 4.1 语义动作 62 ...
  • 就算括号不行,操作符优先级是否能够控制计算顺序呢? 35  3.6 可是&&和||操作符呢?我看到过类似while((c = getchar()) != EOF && c != '\n')的代码…… 35 3.7 是否可以安全地认为,一旦&&和||左边的表达式...
  • 本书特色: ◆介绍了多个库包,可用于简化编程流程,使学生可以专注于高层次理论问题的研究,避免了C语言编程的繁琐细节; ◆详细讨论了递归编程的用法,包括大量难度各异的编程示例和练习,如简单的递归函数,分析...
  • 《明解C语言 第3版 入门篇》是日本的C语言经典教材,自出版以来不断重印、修订,被誉为“C语言圣经”。 《明解C语言 第3版 入门篇》图文并茂,示例丰富,第3版从190段代码和164幅图表增加到205段代码和220幅图表,对...
  • 1.1 C语言的发展过程 1.2 当代最优秀的程序设计语言 1.3 C语言版本 1.4 C语言的特点 1.5 面向对象的程序设计语言 1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序...
  • 1.1 C语言的发展过程 1.2 当代最优秀的程序设计语言 1.3 C语言版本 1.4 C语言的特点 1.5 面向对象的程序设计语言 1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序...
  • C++程序设计谭浩强(清华大学).pdf

    热门讨论 2012-02-13 22:36:36
    目录 第1章 C语言程序设计的概念 1.1 程序与程序设计语言 1.1.1 计算机与程序 ... 附录A c语言运算符的优先级与结合性 附录B C99关键字 附录C ASCII码表 附录D 常用C语言标准库函数 参考文献
  • 3.3 当要排序的数据集因太大而无法全部装入内存时,应怎样排序? 3.4 哪一种查找方法最方便? 3.5 哪一种查找方法最快? 3.6 什么是哈希查找? 3.7 怎样对链表进行排序? 3.8 怎样查找链表中的数据? 第4章...
  • 4.2.1 运算符的优先级 44 4.2.2 整数运算和一元负号运算符 47 4.2.3 模运算符 48 4.2.4 整型值和浮点值的相互转换 49 4.2.5 类型转换运算符 51 4.3 赋值运算符 51 4.4 计算器类 52 4.5 位运算符 54 4.5.1 ...
  • 第1章 计算机与C++编程简介 1.1 简介 1.2 什么是计算机 1.3 计算机组成 ...附录A 运算符的优先级与结台律 附录B ASCII字符集 附录C 数值系统 附录D 有关C++的Internet与Web资源 参考文献 【媒体评论】
  • 第1章 计算机与C++编程简介 1.1 简介 1.2 什么是计算机 1.3 计算机组成 ...附录A 运算符的优先级与结台律 附录B ASCII字符集 附录C 数值系统 附录D 有关C++的Internet与Web资源 参考文献 【媒体评论】
  • Objective-C2.0程序设计

    2013-04-14 19:22:27
    4.2.1 运算符的优先级 4.2.2 整数运算和一元负号运算符 4.2.3 模运算符 4.2.4 整型值和浮点值的相互转换 4.2.5 类型转换运算符 4.3 赋值运算符 4.4 计算器类 4.5 位运算符 4.5.1 按位与运算符 4.5.2 按位或运算符 ...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

c语言符号优先级排序

c语言 订阅