^运算符.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
^运算符

异或运算: 首先异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0.该方法被广泛推广用来统计一个数的1的位数! 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 即:   0^0 = 0,?   1^0 = 1,?   0^1 = 1,?   1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1? 0异或任何数=任何数 (2) 1^0=1,1^1=0? 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 ??? 例如对第2位和第3位翻转,则可以将该数行按位异或运算。      ?00000110 =(2) 实现两个值的交换,而不必使用临时变量。 ??? 例如交换两个整数ab值,可通过下列语句实现:     a = a^b;   //a    b = b^a;   //b    a = a^b;   //a位运算 位运算时把数字用二进制表示之后,对每一位上0或者1的运算。理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。 其实二进制的运算并不是很难掌握,因为位运算总共只有5种运算:与、或、异或、左移、右移。如下表: ? 与() 0 0 = 0 1 0 = 0 0 1 = 0 1 1 = 1 或(|) 0 | 0 = 0 1 | 0 = 1 0 | 1 = 1 1 | 1 = 1 异或(^) 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 1 ^ 1 = 0 左移运算:   左移运算符mn表示吧m左移n位。左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n个0.比如: 2 =10001010 3 =右移运算:   右移运算符mn表示把m右移n位。右移n位的时候,最右边的n位将被丢弃。但右移时处理最左边位的情形要稍微复杂一点。这里要特别注意,如果数字是一个无符号数值,则用0填补最左边的n位。如果数字是一个有符号数值,则用数字的符号位填补最左边的n位。也就是说如果数字原先是一个正数,则右移之后再最左边补n个0;如果数字原先是负数,则右移之后在最左边补n个1.下面是堆两个8位有符号数作右移的例子: 2 =10001010 3 =  关于移位的运算有这样的等价关系:把整数右移一位和把整数除以2在数学上是等价的。 a = 1 ; //a左移一位等效于a = a * 2; a = 2 ; //a左移2位等效于a = a * 2的2次方(4); ?  计算机内部只识别1、0,十进制需变成二进制才能使用移位运算符, 。 int j = 8; p = j 1; coutpendl; 在这里,8左移一位就是8*2的结果16 。   移位运算是最有效的计算乘/除乘法的运算之一。   按位与()其功能是参与运算的两数各对应的二进制位相与。只有对应的两个二进制位均为1时,结果位才为1,否则为0 。参与运算的数以补码方式出现。 先举一个例子如下:   题目:请实现一个函数,输入一个正数,输出该数二进制表示中1的个数。 int?count(BYTE?n)?? {?? ????int?num?=?0;?? ????while(n){?? ????????n?=?(n?-?1);?? ????????num++;?? ????}?? ????return?num;?? }??   这里用到了这样一个知识点:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0 。 那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。   总结:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0 。 位运算的应用可以运用于很多场合: 清零特定位(mask中特定位置0,其它位为1 , s = s mask)。 取某数中指定位(mask中特定位置,其它位为0, s = s mask)。 举例:输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n。 解决方法:第一步,求这两个数的异或;第二步,统计异或结果中1的位数。 span?style=font-size:18px#includeiostream?? using?namespace?std;?? ?? int?main

文档评论(0)

zsmfjh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档