《C语言教程》08章 比较、逻辑、位运算符

[复制链接]
814|4
 楼主| niuyaliang 发表于 2015-3-16 17:17 | 显示全部楼层 |阅读模式
一、运算符的优先级


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-16 17:17 | 显示全部楼层
二、比较、逻辑、位运算符
    只有类型相同(或C语言能自动转换)的表达式才能比较,如果类型不同就必须用函数转换。例如:判断一字符串的长度是否等于10,就要用strlen()将字符串的长度求出来变成了整型,才能和10比较。
    比较运算符只有6个,即:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。比较运算符也叫关系运算符。
    逻辑运算符只有3个,即:与AND(&&)、或OR(||)、非NOT(!)。
    位运算符只有6个,即:与AND(&)、或OR(|)、非NOT(~)、异或XOR(^)、左移ShiftLeft(<<)、右移ShiftRight(>>)。
 楼主| niuyaliang 发表于 2015-3-16 17:20 | 显示全部楼层
例如下面的例子:

  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     //全部为1字节的变量,实际运算是4字节
  5.     unsigned char i, j, k1, k2, k3 ;

  6.     i = 0x5A;     //    0101 1010    --5A
  7.     j = 0x9B;     //    1001 1011    --9B
  8.     k1 = ~i;      //    1010 0101    --A5
  9.     k2 = i << 2;  //(01)0110 1000    --68
  10.     k3 = j >> 2;  //    0010 0110(11)--26

  11.     printf("与运算  :5A & 9B = %X\n",i & j);  //1A
  12.     printf("或运算  :5A | 9B = %X\n",i | j);  //DB
  13.     printf("异或运算:5A ^ 9B = %X\n",i ^ j);  //C1
  14.     printf("取反运算:~5A = %X\n", k1);        //A5
  15.     printf("左移2位 :5A << 2 = %X\n",k2);     //68
  16.     printf("右移2位 :9B >> 2 = %X\n",k3);     //26

  17.     //注意:这儿验证参与运算的实际结果不是1字节,而是4字节
  18.     printf("取反运算:~5A = %X\n", ~i);        //FFFF FFA5
  19.     printf("左移2位 :5A << 2 = %X\n",i << 2); //0000 0168
  20.     printf("右移2位 :9B >> 2 = %X\n",j >> 2); //0000 0026

  21.     return 0;
  22. }

结果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-16 17:20 | 显示全部楼层
三、其它运算符
一些常用易错的运算符要注意。
1.逗号(,)运算符,将几个内容合成一个运算,且不改变分开运行的结果。for语句中常用。
2.i++和++i单独使用时功能相同,赋值时有先后问题。
3.赋值语句可以连续赋值,但不建议过多过杂。
 楼主| niuyaliang 发表于 2015-3-16 17:21 | 显示全部楼层
比如下面的例子:
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.     unsigned char i, j, k1, k2, k3 ;

  5.     //逗号,运算符
  6.     i = 15, j = 19;
  7.     k1 = (12, 23, i, j);  //将12,23,i,j分别赋值给k1,最后一个是j
  8.     printf("k1 = %d\n", k1);
  9.     printf("\n");


  10.     //增1运算符
  11.     k2 = i++;    //k2=15, i=16  先赋值后加
  12.     k3 = ++j;    //k3=20, j=20  先加后赋值
  13.     printf("i = %d    k2 = %d\n", i, k2);
  14.     printf("j = %d    k3 = %d\n", j, k3);
  15.     printf("\n");

  16.     //赋值运算符
  17.     printf("赋值前:i=%d   j=%d   k1=%d   k2=%d   k3=%d\n", i, j, k1, k2, k3);
  18.     i = j = k1 = k2 = k3;    //自右向左,将k3分别赋给k2,k1,j,i
  19.     printf("赋值后:i=%d   j=%d   k1=%d   k2=%d   k3=%d\n", i, j, k1, k2, k3);

  20.     return 0;
  21. }

结果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部