C语言操作符(%,&,|,^,<<,>>)

有目录,可自由选择。

    • 取余符号%

取余符号是求余数,如5%2=1,17%6=5;

但是要注意的是参与取余的2个数都必须为整型数。

    • 与符号&-按二进制位与

如:

#include
int main()
{
    int a = 3, b = 5;
    int c = a & b;
    printf("%d\n", c);
    return 0;
}

与符号是将符号2边的数写成2进制,一一对齐,上下2个数&&,只有同真才为真;

a=3写成二进制是 00000000000000000000000000000011;

b=5写成二进制是 00000000000000000000000000000101;

2个数进行运算是 00000000000000000000000000000001;

得到二进制数1,二进制数1转换成十进制是1,所以输出结果是1;

总结:

以二进制形式进行运算,以十进制形式输出结果。

    • 或符号|

或符号和与符号类似,都是以二进制形式进行运算,十进制输出。但|符号只有2假时才为假,其他情况为真;

a=3写成二进制是 00000000000000000000000000000011;

a=5写成二进制是 00000000000000000000000000000101;

进行或运算 00000000000000000000000000000111;

111换算成十进制是7,即输出结果为7;

    • 异或符号^

进行异或运算时也是以二进制形式进行,异或运算的方法就是相同为0,相异为1;

a=3写成二进制是 00000000000000000000000000000011;

a=5写成二进制是 00000000000000000000000000000101;

进行异或运算 00000000000000000000000000000110;

110换算成十进制是6,即输出的结果为6;

    • 右移操作符>>

#include
int main()
{
    int a = 8;
    int c = a >>1;
    printf("%d\n", c);
    return 0;
}

右移操作符也是以二进制形式进行,a>>1,表示以二进制形式向右移动一位;

a=8的二进制表示是1000如图:

C语言操作符(%,&,|,^,<<,>>)_第1张图片
右操作符分为2种:
1.算数移位
右边丢弃,左边补原符号位;
2.逻辑移位
右边丢弃,左边补0;

不过一般计算机都采用算数移位,如上图,移位补位后得到的结果为100,转换成10进制是4;即输出结果为4;

要特别注意的是负数存储到内存中的是补码,要将原码换成补码后在进行移位,在这里不多讲,可以参考

C语言二进制(原码,反码,补码)

6.左移操作符<<

左移操作符就是将二进制数向左移相应的位数,右边补0.

若a=8, c=a<<3;则移位后补0是1000000,转换成10进制是64.

C语言操作符(%,&,|,^,<<,>>)_第2张图片

此文章中涉及到较多关于二进制的问题,并没有详讲,可以参考

C语言二进制http://t.csdn.cn/UilQ8

你可能感兴趣的:(C语言操作符,c语言)