C/C++位的移位操作

来源:互联网 发布:中科大数据库原理 答案 编辑:程序博客网 时间:2024/05/07 13:49

左移与右移

1.左移运算符(<<)是双目运算符,其功能是把"<<"运算符左边的运算数的各二进位全部左移若干位,移动的位数由"<<" 运算符右边的数指定,高位丢弃,低位补0

     例如:

Int a = 0x1234;

Unsigned char* p =(unsigned char*)&a;

a = *(p)<<8;

此时a的最左端一个字节移动8位,a=0x3400;

 

    2.右移运算符(>>)是双目运算符,其功能是把">>"运算符左边的运算数的各二进位全部右移若干位,移动的位数按">>"运算符右边的数指定。

  在进行右移时对于有符号的数需要注意符号问题,当为正数时,最高位补0,而为负数时,最高位补01取决于编译系统的规定,移入0的称为"逻辑右移",移入1的称为"算术右移"

Int x= 3;

3的二进制为:00000011右移1位后为00000001

Int a= X>>1 

此时a = 1;

0x12345678转换为0x78563412

#include<stdio.h>

int main()

{

 

unsigned int a =0x12345678

unsigned int b,c,d,e;

unsigned char *p =(unsigned char*)&a;

b =(*p)<<24;//将低字节的数据左移24位即3个字节将78移动到12位置

c = *(p+1)<<16;

d = *(p+2)<<8;

e = *(p+3);

 

printf("b=%0x,c=%0x,d=%0x,e=%0x\n",b,c,d,e);

a =b+c+d+e;

printf(“a=0x%0x\n”,a);

return 0;

}

 

 

 

运行结果如下:

b=78000000,c=560000,d=3400,e=12

a=0x78563412

 

0 0
原创粉丝点击