打印

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

[复制链接]
542|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
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 | 只看该作者
例如下面的例子:

#include <stdio.h>

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

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

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

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

    return 0;
}

结果如下:

使用特权

评论回复
地板
niuyaliang|  楼主 | 2015-3-16 17:20 | 只看该作者
三、其它运算符
一些常用易错的运算符要注意。
1.逗号(,)运算符,将几个内容合成一个运算,且不改变分开运行的结果。for语句中常用。
2.i++和++i单独使用时功能相同,赋值时有先后问题。
3.赋值语句可以连续赋值,但不建议过多过杂。

使用特权

评论回复
5
niuyaliang|  楼主 | 2015-3-16 17:21 | 只看该作者
比如下面的例子:
#include <stdio.h>

int main(void)
{
    unsigned char i, j, k1, k2, k3 ;

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


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

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

    return 0;
}

结果如下:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝