首页 > 代码库 > 位运算---整数间的转化
位运算---整数间的转化
此题巧妙地转为熟悉的的求一个数中1的个数,告诉我们一些看似不熟悉的题目其实认真想想可以转为化我们熟悉的题目。
//题目描述////编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。//给定两个整数int A,int B。请返回需要改变的数位个数。//测试样例://10, 5//返回:4//思路:A 需要变换 多少位 才能得到B,位变换无非就是0 - 1, 1 - 0的过程所以,A和B之间 有多少的不同的0 - 1, 1 - 0的变换就有需要多少位的变换,//由于异或操作是 相同为0 不同为1 也即1 - 0, 0 - 1的结果为1,也就是转换成A^B之后 1 的个数求解;--->问题转化class Transform {public: int calcCost(int A, int B) { // write code here int res = A ^ B; int count = 0; while (res != 0) { if ((res & 1) != 0) { count++; } res >>= 1; } return count; } int calcCost(int A, int B) { // write code here int res = A ^ B; int count = 0; while (res != 0) { count++; //去掉最后一位的1 例如 1111 & (1111-1) = 1110 将最后一位1 去掉 res &= (res - 1); } return count; }};
位运算---整数间的转化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。