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,而为负数时,最高位补0或1取决于编译系统的规定,移入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
- C/C++位的移位操作
- C语言循环移位及位操作
- C++/C移位操作
- c语言操作符---位操作符、移位操作符
- C/C++的移位(32位CPU)
- c中的移位操作
- C移位操作
- C语言移位操作
- c、java移位操作
- C语言的移位操作符
- C语言的移位操作符
- C语言的移位操作符
- C语言的移位操作符
- C的位操作
- c的位操作
- C的位操作
- c/c++位操作简介--移位、位与、位或、异或
- 【C】移位操作 处理乘法
- 润乾——表达式
- linux驱动之--fops的关联
- Swift百万线程攻破单例(Singleton)模式
- linux查看网卡平均流量的脚本
- C/C++中static关键字作用总结
- C/C++位的移位操作
- Android摄制视频(一)
- java正则表达式
- HUST 1328 String KMP
- 简单易学的机器学习算法——神经网络之BP神经网络
- codeforce 18C
- org-mode,最强的任务管理利器
- [异步][jms][activeMq]如何做到重试机制不会导致一条消息被多次执行.
- 《How To Tomcat Works》-第六章 生命周期