
int reverse(int n){ int r = 0; int i = 0; for(i = 0; i < 29; i++) //Should be i < 32 { r = (r << 1) + (n & 1); //| instead of + to make it obvIoUs I'm handling bits n >>=1; } return r;} 这是我的printBits函数:
voID printBits(int n){ int mask = 0X10000000; //unsigned int mask = 0X80000000; while (mask) { if (mask & n) { printf("1"); } else { printf("0"); } mask >>= 1; } printf("\n");} 一个工作?反转功能
int reverse2(int n){ int r = n; int s = sizeof(n) * 7; // int s = (sizeof(n) * 8) -1 for (n >>= 1; n; n >>=1) { r <<=1; r |= n & 1; s--; r <<= s; return r;}解决方法 你有: int mask = 0x10000000;
这里有两个问题.你没有设置高位,如果你这样做了,它仍然(可能)不起作用,因为你的编译器会在signed int上使用算术移位.
您想要将面具更改为:
unsigned int mask = 0x80000000;
对于算术移位,向右移位0x80000000将永远不会变为零,因为符号位将神奇地扩展到其他位.有关算术移位的更多详细信息,请参见here.
总结以上是内存溢出为你收集整理的这个反转位顺序功能怎么了?全部内容,希望文章能够帮你解决这个反转位顺序功能怎么了?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)