C++位操作的常见用法小结
本文以实例形式对C++位操作的常见用法进行了总结。分享给大家供大家参考之用。具体方法如下:
在C++中位操作有6种基本操作符,按照优先级分别是:
取反 ~
移位 << >>
与 &
异或 ^
或 |
常用的用法有:
1 判断偶数,判断最低位是0还是1即可,比求模快
x % 2 != 0 //x正负都可以判断;不用x%2 == 1,因为如果x为负奇数,x%2=-1 x & 0x1 == 0
2 交换两个数,不用中间变量
void mySwap(int &a, int &b) { if(a == b) //相等时也能得到正确结果,但是没必要了 return; a ^= b; b ^= a; a ^= b; }
3 求整数的二进制表示中1的个数,不用一个一个的移位判断
int numOfBit1(int a) { int cnt = 0; while(a != 0) { ++cnt; a &= a - 1; //将最右边的1置为0;正负都可计算,负数是按照补码计算的,最后的符号位也被统计 } return cnt; }
4 正负转换,不使用正负号。不管正数负数,取反后加1即可
int a = 1; a = ~a + 1; //a变成-1 a = ~a + 1; //a又变成1
5 求绝对值,不判断正数负数,不使用正负号,返回绝对值
int myAbs(int a) { int sign = a >> 31; //如果a为正数,sign为0;否则sign为-1,即0xFFFFFFFF return (a^sign) - sign; //(a^0)-0 = a, (a^-1)-(-1) = ~a+1 = -a ,a^-1即为a取反 }
希望本文所述对大家C++程序设计的的学习有所帮助。
相关推荐
-
C++中extern "C"的用法
学习过C++的人都知道,extern关键字可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.这里起到的是声明作用范围的用处.另外,extern还可以与"C"连用,作为链接指示.本文就此进行实例说明如下: 一.C++名字修饰(Name Mangling) 首先需要从C++的重载说起,在C++中函数重载指的是几个函数的函数名相同,参数列表不同.那么当生成obj中间文件/目标文件的时候,C++编译器如何区分这几个重载函数呢?可以
-
C++模板类的用法实例
本文实例讲述了C++中模板类的用法,分享给大家供大家参考.具体方法如下: //#include "StdAfx.h #ifndef __AFXTLS_H__ #define __AFXTLS_H__ #include <Windows.h> class CSimpleList { public: CSimpleList(int nNextOffset=0); void Construct(int nNextOffset); //接口 BOOL IsEmpty() const; voi
-
C++指向函数的指针用法详解
本文以实例形式展示了C++指向函数的指针用法,是深入学习C++所必须掌握的关键知识点.分享给大家供大家参考之用.具体方法如下: 函数指针 现来看看以下声明语句,看看其含义: float (*h(int, void (*)(int)))(int); 以下是一个变量指针的定义语句: float* pf; 以下是一个普通函数的声明语句: float f(); 请看以下声明语句: float* g(); 因为()的优先级高于*, 所以相当于: float* (g()); g是一个函数, 返回值为floa
-
C++采用TLS线程局部存储的用法实例
本文实例讲述了C++采用TLS线程局部存储的用法.分享给大家供大家参考. 具体方法如下: 复制代码 代码如下: // useTLS.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <process.h> //声明 VOID InitStartTime(); DWORD GetUserTime(); //TLS索引,作全局变量 DWO
-
C++中Semaphore内核对象用法实例
本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考.具体方法如下: 复制代码 代码如下: // Semaphore.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include <process.h> HANDLE g_hSemaphore; DWORD g_nConut1 = 0; DWORD g_nConut2 = 0;
-
C++采用openfilename打开文件对话框用法实例
本文实例讲述了C++采用openfilename打开文件对话框用法,分享给大家供大家参考.具体方法如下: 这里需要注意,有的时候会因为没设置nMaxFile,而一直不出现对话框. 具体功能代码如下: 复制代码 代码如下: char szFileName[MAX_PATH]={0}; OPENFILENAME openFileName = {0}; openFileName.lStructSize = sizeof(OPENFILENAME); openFileName.nMaxFile =
-
C++之boost::array的用法
本文实例讲述了C++之boost::array的用法,分享给大家供大家参考.具体如下: 复制代码 代码如下: #include <string> #include <iostream> #include <boost/array.hpp> #include <algorithm> using namespace std; int main() { boost::array<int, 5> array_temp = {{12,
-
C++友元(Friend)用法实例简介
相对于Java而言,友元是C++中特有的一种元素,很多教材上对其介绍的相对较少,因此初学的时候往往不能很快掌握,本文总结了友元的用法和一些注意的地方,供大家参考借鉴.希望能对初学C++的朋友起到一点帮助作用. 操作步骤: 1)在MyFriend类中,将Father类定义成友元 2)写一个Son类继承自Father类 3)在Father类和Son类的构造函数中分别创建MyFriend对象,并定义其内部的三个变量 4)在MyFriend类的构造函数中创建Father对象,并定义其内部的三个变量 结果
-
浅析C/C++中sort函数的用法
sort是STL中提供的算法,头文件为#include<algorithm>以及using namespace std; 函数原型如下: template <class RandomAccessIterator> void sort ( RandomAccessIterator first, RandomAccessIterator last ); template <class RandomAccessIterator, class Compare> void sor
-
C++类中的static和const用法实例教程
static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法.供大家参考借鉴.具体说明如下: 首先以代码用来举例说明.示例代码如下: class A { public: A():m(10) //const成员必须在构造函数的初始化构造列表中初始化 { q = 40; } void fun1()const { m++; //错误.const成员是常量,不能改变其值. n++; //正确.static变量n属于类,但是每个对象的函数都可以访
-
C++中DeviceIoCteatol的用法实例
本文是一篇译文,主要以实例形式讲述了C++中DeviceIoCteatol的用法.分享给大家供大家参考.具体方法如下: 应用程序代码如下: 复制代码 代码如下: DWORD dwBytesReturned = 0; BYTE bytBuffer_1[512]; BYTE bytBuffer_2[512]; CHAR string[2048]; HANDLE hDevice, hDriver; BOOL bRet; bRet = DeviceIo
-
C++模板类的用法
本文实例讲述了C++模板类的用法,分享给大家供大家参考.具体实现方法如下: main.h头文件如下: 复制代码 代码如下: template <class T> class actioncontainer { public: //构造函数 actioncontainer() { m_nRedoPos = 0; m_nUndoPos = 0; } //容器的接口函数 void add(T val
随机推荐
- Java中synchronized关键字修饰方法同步的用法详解
- 一个关于正则表达式的问题
- Validform+layer实现漂亮的表单验证特效
- Vue实现选择城市功能
- 记一次巧妙的hacking
- JavaScript prototype属性深入介绍
- 浅谈使用MVC模式进行JavaScript程序开发
- 微信小程序 实现动态显示和隐藏某个控件
- JQuery $.each遍历JavaScript数组对象实例
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
- js验证是否为数字的总结
- python中的函数用法入门教程
- AJAX在Post中文的时候乱码的解决方法
- Linux 中unzip解压时中文乱码的解决办法
- C语言实现BMP转换JPG的方法
- IIS 7 中设置文件上传大小限制设置方法
- 关于Python面向对象编程的知识点总结
- 病毒也是宽带路由器死机的罪魁之一
- Android表格图标库制作
- Redis集群的相关详解