C语言运算符

转载 2005年05月21日 14:07:00
    Turbo C的运算符非常丰富, 主要分为三大类: 算术运算符,  关系运算符与
逻辑运算符, 按位运算符。除此之外, 还有一些用于完成特殊任务的运算符。下
面分别进行介绍。

    5.1 算术运算符
    Turbo C的算术运算符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       操作符                          作用
────────────────────────────
          +                        加, 一目取正
          -                        减, 一目取负
          *                             乘
          /                             除
          %                            取模
          --                            减1
          ++                            加1
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    一、一目和二目操作
    一目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。
    二目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。
    在Turbo C中加、减、乘、除、取模的运算与其它高级语言相同。需要注意
的是除法和取模运算。
    例如:
      15/2    是15除以2商的整数部分7
      15%2    是15除以2的余数部分1
    对于取模运算符"%", 不能用于浮点数。
    另外, 由于Turbo C中字符型数会自动地转换成整型数,  因此字符型数也可
以参加二目运算。
    例如:
     main()
     {
          char m, n;     /*定义字符型变量*/
          m='c';         /*给m赋小写字母'c'*/
          n=m+'A'-'a';   /*将c中的小写字母变成大写字母'B'后赋给n*/
          ...
     }
    上例中m='c'即m=98, 由于字母A和a的ASCII码值分别为65和97。这样可以将
小写字母变成大写字母, 反之, 如果要将大写字母变成小写字母,  则用c+ 'a'
-'A'进行计算。

    二、增量运算
    在Turbo C中有两个很有用的运算符, 在其它高级语言中通常没有。这两个
运算符就是增1和减1运算符"++"和"--", 运算符"++"是操作数加1, 而"--" 则是
操作数减1。
    例如:
      x=x+1         可写成x++, 或++x
      x=x-1         可写成x--, 或--x
    x++(x--)与++x(--x)在上例中没有什么区别, 但x=m++和x=++m却有很大差别。
      x=m++    表示将m的值赋给x后, m加1。
      x=++m    表示m先加1后, 再将新值赋给x。

    三、赋值语句中的数据类型转换
    类型转换是指不同类型的变量混用时的类型改变。
    在赋值语句中, 类型转换规则是:
      等号右边的值转换为等号左边变量所属的类型。
    例如:
     main()
     {
          int i, j;      /*定义整型变量*/
          float f, g=2.58;    /*定义浮点型变量*/
          f=i*j;         /*i与j的乘积是整型数, 被转换成为浮点数赋给f*/
          i=g;           /*g中的浮点型数转换成为整型数赋给i*/
          ...
     }
    由于Turbo C按上述数据类型转换规则, 因此在作除法运算时应特别注意。
    例如:
     main()
     {
          float f;
          int i=15;
          f=i/2;
     }
    上面程序经运行后, f=7并不等于准确值7.5。正确的程序应该是:
     main()
     {
          float f;
          int i=15;
          f=i/2.0;
     }
    也可直接将i定义为浮点数。

    5.2 关系运算符和逻辑运算符
    一、逻辑运算符
    逻辑运算符是指用形式逻辑原则来建立数值间关系的符号。
    Turbo C的逻辑运算符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
        操作符                      作用
─────────────────────────────
          &&                       逻辑与
          ||                       逻辑或
          !                        逻辑非
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    二、关系运算符
    关系运算符是比较两个操作数大小的符号。
    Turbo C的关系运算符如下:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
        操作符                        作用
─────────────────────────────
          >                           大于
          >=                        大于等于
          <                           小于
          <=                        小于等于
          ==                          等于
          !=                         不等于
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    关系运算符和逻辑运算符的关键是真(true)和假(false)的概念。Turbo C中
true可以是不为0的任何值, 而false则为0。 使用关系运算符和逻辑运算符表达
式时, 若表达式为真(即true)则返回1, 否则, 表达式为假(即false),  则返回0。
    例如:
     100>99         返回1
     10>(2+10)      返回0
     !1&&0          返加0
    对上例中表达式!1&&0, 先求!1和先求1&&0将会等于出不同的结果,  那么何
者优先呢? 这在Turbo C中是有规定的。 有关运算符的优先级本节后面将会讲到。

    5.3 按位运算符
    Turbo C和其它高级语言不同的是它完全支持按位运算符。这与汇编语言的
位操作有些相似。
    Turbo C中按位运算符有:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
        操作符                       作用
────────────────────────────
          &                        位逻辑与
          |                        位逻辑或
          ^                       位逻辑异或
          -                        位逻辑反
          >>                         右移
          <<                         左移
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    按位运算是对字节或字中的实际位进行检测、设置或移位, 它只适用于字符
型和整数型变量以及它们的变体, 对其它数据类型不适用。
    关系运算和逻辑运算表达式的结果只能是1或0。 而按位运算的结果可以取0
或1以外的值。
    要注意区别按位运算符和逻辑运算符的不同, 例如, 若x=7, 则x&&8 的值为
真(两个非零值相与仍为非零), 而x&8的值为0。
    移位运算符">>"和"<<"是指将变量中的每一位向右或向左移动, 其通常形式
为:
     右移:     变量名>>移位的位数
     左移:     变量名<<移位的位数
    经过移位后, 一端的位被"挤掉",   而另一端空出的位以0 填补,   所以,
Turbo C中的移位不是循环移动的。
    5.4 Turbo C的特殊运算符
    一、"?"运算符
    "?"运算符是一个三目运算符, 其一般形式是:
      <表达式1>?<表达式2>:<表达式3>;
    "?"运算符的含义是: 先求表达式1的值, 如果为真, 则求表达式2 的值并把
它作为整个表达式的值; 如果表达式1 的值为假, 则求表达式3 的值并把它作为
整个表达式的值。
    例如:
     main()
     {
          int x, y;
          x=50;
          y=x>70?100:0;
     }
    本例中, y将被赋值0。如果x=80, y将被赋值100。
    因此, "?"运算符可以代替某些if-then-else形式的语句。

    二、"&"和"*"运算符
    "&"运算符是一个返回操作数地址的单目操作符。
    "*"运算符是对"&"运算符的一个补充, 它返回位于这个地址内的变量值, 也
是单目操作符。
    例如:
     main()
     {
          int i, j, *m;
          i=10;
          m=&i;          /*将变量i的地址赋给m*/
          j=*m;          /*地址m所指的单元的值赋给j*/
     }
    上面程序运行后, i=10, m为其对应的内存地址, j的值也为10。

    三、","运算符
    ","运算符用于将多个表达式串在一起, ","运算符的左边总不返回, 右边表
达式的值才是整个表达式的值。
    例如:
     main()
     {
          int x, y;
          x=50;
          y=(x=x-5, x/5);
     }
    上面程序执行后y值为9, 因为x的初始值为50, 减5后变为45, 45除5为9赋给
y。
 

    四、sizeof运算符
    sizeof运算符是一个单目运算符, 它返回变量或类型的字节长度。
    例如:
     sizeof(double) 为8
     sizeof(int)    为2
    也可以求已定义的变量, 例如:
     float f;
     int i;
     i=sizeof(f);
    则i的值将为4。

    五、联合操作
    Turbo C中有一特殊的简写方式, 它用来简化一种赋值语句,  适用于所有的
双目运算符。其一般形式为:
     <变量>=<变量><操作数><表达式>
    相当于
     <变量><操作数>=<表达式>
    例如:
      a=a+b         可写成    a+=b
      a=a&b         可写成    a&=b
      a=a/(b-c)     可写成    a/=b-c
   5.5 Turbo C运算符的优先级
    Turbo C规定了运算符的优先次序即优先级。 当一个表达式中有多个运算符
参加运算时, 将按下表所规定的优先级进行运算。表中优先级从上往下逐渐降低,
同一行优先级相同。
    例如:
       表达式 10>4&&!(100<99)||3<=5 的值为1
       表达式 10>4&&!(100<99)&&3<=5 的值为0

              Turbo C运算符的优先次序
━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━
                    表达式                                             ┃优先级
────────────────────────────╂────
  ()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)  ┃ 最高
────────────────────────────┃  ↑
 !(逻辑非) .(位取反) -(负号) ++(加1) --(减1) &(变量地址) ┃  │
────────────────────────────┃  │
   *(指针所指内容)  type(函数说明)  sizeof(长度计算)       ┃  │
────────────────────────────┃  │
     *(乘)     /(除)     %(取模)                                  ┃  │
────────────────────────────┃  │
     +(加)     -(减)                                                 ┃  │
────────────────────────────┃  │
     <<(位左移)          >>(位右移)                              ┃  │
────────────────────────────┃  │
     <(小于)   <=(小于等于)   >(大于)   >=(大于等于)       ┃  │
────────────────────────────┃  │
     ==(等于)       !=(不等于)                                    ┃  │
────────────────────────────┃  │
     &(位与)                                                          ┃  │
────────────────────────────┃  │
     ^(位异或)                                                       ┃  │
────────────────────────────┃  │
     |(位或)                                                           ┃  │
────────────────────────────┃  │
     &&(逻辑与)                                                      ┃  │
────────────────────────────┃  │
     ||(逻辑或)                                                       ┃  │
────────────────────────────┃  │
     ?:(?表达式)                                                      ┃  │
────────────────────────────┃  │
     =    +=   -=(联合操作)                                       ┃  │
────────────────────────────┃  │
     ,(逗号运算符)                                                   ┃ 最低
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

From: http://www.cnread.net/cnread1/dnwl/cxsj/c/cyyb/010.htm

C语言之各种运算符

异或的符号是⊕。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0. xor运算的逆运算是它本身,也就是说两次异或同一个...
  • xlhcgd
  • xlhcgd
  • 2015年03月28日 15:35
  • 898

第三章 C语言运算符与表达式

C语言运算符与表达式
  • ITTechnologyHome
  • ITTechnologyHome
  • 2016年05月30日 22:10
  • 5370

C语言运算符:(一)

C语言操作符众多,主要包括:算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、单目运算符、条件运算符、逗号运算符...C语言众多的运算符是它为人诟病的一个原因,但也是它众多的运算符提供了其他语...
  • wenjinxingwen
  • wenjinxingwen
  • 2016年10月18日 00:46
  • 424

C语言中的所有运算符用法及总结

1
  • sigma_inf
  • sigma_inf
  • 2017年03月26日 16:45
  • 1950

C语言:位异或运算符^

C语言:位异或运算符^  位运算符家族中,最常用的,某过于异或运算符。 异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^...
  • u014427196
  • u014427196
  • 2014年10月31日 10:39
  • 6527

C语言运算符表达式

一、分类 C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、>、 二、运算符的结合性和优先级 1. 运算符的结合性 在C语言的运算符...
  • qq_31059475
  • qq_31059475
  • 2016年04月19日 23:15
  • 3654

C语言之左移和右移运算符

左移运算符() 左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。 右移运算符(>>) 右移...
  • hanwang3
  • hanwang3
  • 2015年09月13日 00:58
  • 6658

黑马程序员------C语言中sizeof运算符的使用

sizeof运算符是一个单目运算符      作用是:计算常量、变量、数据类型 在内存中占用的字节数      1)用sizeof计算常量在内存中占用的字节数         sizeof(1) 计算...
  • u012161322
  • u012161322
  • 2015年07月15日 15:56
  • 548

结合一道面试题 看c语言运算符的执行顺序

从一道面试题看C语言运算符执行优先级
  • a359696929
  • a359696929
  • 2016年05月14日 16:39
  • 795

C语言中后置自增(减)运算符的使用

我们知道前置自增(自减)运算符是先增(减)再运算,而后置自增(自减)运算符则是先运算后自增,然而有时候仍然会在后置运算符这里犯错。先运算再自增也就是等都运算完之后才自增,即使括上括号也是最后才自增,不...
  • F__shigang
  • F__shigang
  • 2017年03月13日 14:23
  • 491
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言运算符
举报原因:
原因补充:

(最多只允许输入30个字)