使用移位操作符实现无符号整数位反转
来源:互联网 发布:易语言编程教学 编辑:程序博客网 时间:2024/05/20 18:47
>>
左移
各二进位全部左移若干位,高位丢弃,低位补0
>>
右移
各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)。
左移右移符号结合性L-R
#include <stdio.h> template <class T> void PrintfBinary(T a) { int i; for (i = sizeof(a) * 8 - 1; i >= 0; --i) { if ((a >> i) & 1) putchar('1'); else putchar('0'); if (i%8==0) putchar(' '); } putchar('\n'); } int main() { int ll=0x800000ff;printf("算数右移1位:\n");PrintfBinary(ll);ll>>=1;printf("算数右移后\n");PrintfBinary(ll);}
1与0异或得1,1与1异或得0,所以与1异或的结果与原来的位相反。
0与0异或得0,0与1异或得1,所以与0异或的结果与原来的位相同。
1与0相与得0,1与1相与的1,所以与1相与的结果与原来的位相同。
0与0相与得0,0与1相与得0,所以与0相与的结果为0。
1与0相或得0,1与1相或得1,所以与1相或的结果为1。
0与0相或得0,0与1相或得1,所以与0相或的结果与原来的位相同。
<pre name="code" class="html">#include <stdio.h> template <class T> void PrintfBinary(T a) { int i; for (i = sizeof(a) * 8 - 1; i >= 0; --i) { if ((a >> i) & 1) putchar('1'); else putchar('0'); if (i == 8) putchar(' '); } putchar('\n'); } template<typename T>T Reverse(T a){int len=sizeof(T)*8;int i,j;i=0;j=len-1;int tem1,tem2;while(i<j){tem1=(a>>(i%len))&1;tem2=(a>>(j%len))&1;if(tem1!=tem2){a^=1<<(i%len);a^=1<<(j%len);}i++;j--;}return a;}int main() { printf("二进制逆序\n\n"); printf("逆序前: "); unsigned short a = 12345; PrintfBinary(a); printf("逆序后: "); unsigned short result=Reverse(a); PrintfBinary(result); }
计算整数中1的个数:
#include <stdio.h> template <typename T> void PrintfBinary(T a) { int i; for (i = sizeof(a) * 8 - 1; i >= 0; --i) { if ((a >> i) & 1) putchar('1'); else putchar('0'); if (i % 8==0) putchar(' '); } putchar('\n'); } template<typename T>int comnumof1(T a){int len=sizeof(T)*8;int count=0;for(int i=0;i<len;i++){if(( (a>>i)&1)==1)count++;}return count;}int main() { printf("二进制中1的个数\n\n"); unsigned short a = 34520; printf("原数 %6d的二进制为: ", a); PrintfBinary(a); printf("原数 %6d中1的个数为%d \n",a,comnumof1(a)); return 0; }
0 0
- 使用移位操作符实现无符号整数位反转
- 按位反转无符号整数问题bitoperate函数(转)
- 用移位和加减运算实现无符号整数除法
- 按位反转无符号字符
- 按位反转无符号字符
- 翻转无符号整数的比特位
- 无符号256位整数运算
- 位运算实现反转字节和求二进制整数中1的个数(无循环)
- 64位有符号与无符号类型的整数
- [算法]用位运算的方法实现无符号整数的除法原理及程序
- 对无符号整形数的比特位反转
- 算术、’ 移位、 位操作符
- verilog 实现无符号整数除法运算
- JavaScript 32位整型无符号操作
- JavaScript 32位整型无符号操作
- 在一个无符号整数中翻转位的顺序
- 将一个无符号整数的bit位逆序
- 对32位无符号整数进行排序
- HP hands off OpenVMS development to VSI 【OpenVMS重获新生】
- Ant
- jQuery 学习笔记
- linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别
- Dijkstra模板
- 使用移位操作符实现无符号整数位反转
- KMP 算法完整版
- Unique Path II
- UVA 12437 Kisu Pari Na 2
- 计算机字符编码
- 安装Tomcat,过程中需要配置的环境变量及遇到的问题
- HDU5326-Work (建反图,遍历)
- IOS开发概述-09.UIController和控制器的View
- python内置函数(三)