C语言:左移运算符和右移动运算符

左移运算符:

        按位左移

        形式:操作数  <<  移动位数

        规则:        

                1.将操作数先转换为二进制数(补码);

                2.二进制数各位左移若干位(移动位数);

                3.在低位补若干个0;

                4.高位左移后溢出,舍弃不起作用;

例如:

        7 << 2

        7转换为二进制:0000 0111,每位向左移动两位变为:0001 1100,转换为十进制数为28.

 代码:

#include<stdio.h>

int main()
{
    unsigned char a, b;
    a = 7;
    b = a << 2;
    printf("%dn",b);
}

 

 


左移运算符:

        按位右移

        形式:操作数  >>  移动位数

        规则:        

                1.将操作数先转换为二进制数(补码);

                2.二进制数各位右移若干位(移动位数);

                3.移出的低位舍弃,并在高位进行补位;

                注意:关于补位的问题

                        1.操作数若为无符号数,则在左边补若干个0;

                        2.操作数若为有符号正数,则在左边补若干个0;

                        3.操作数若为有符号负数,左边补1为算术右移,左边补0为逻辑右移

                

例如:

        1.无符号数:

        7 >> 2

        7转换为二进制:0000 0111,每位向右移动两位变为:0000 0001,转换为十进制数为1.

        2.有符号正数:

        7 >> 2

        (同无符号)7转换为二进制:0000 0111,每位向右移动两位变为:0000 0001,转换为十进制数为1.

        3.无符号数:

        -7 >> 2

        7转换为二进制补码:1111 1001,每位向右移动两位变为:1111 1110,转换为十进制数为-2.这里值得注意的一点,当-7右移位数超过3位时,结果都为1111 1111,转换为十进制一直都是-1;

代码:

#include<stdio.h>

int main()
{
    char a, b, c, d;
    a = -7;
    b = a >> 2;
    c = a >> 3;
    d = a >> 5;
    printf("%dn%dn%dn", b, c, d);
}

 结果:

-2
-1
-1

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>