c - 如何检查数字是否是位回文

标签 c bit-manipulation

我必须写一个代码来检查数字是否是位回文。例如9(1001)有点回文但6(110)不是有点回文。

我已经编写了将数字转换为以二进制表示该数字的字符串的代码,然后检查字符串回文。有没有更好的方法来做到这一点?

最佳答案

我们可以使用位运算符来做到这一点。这个想法是从右到左读取数字的每一位,一次一个,并使用这些位从左到右生成另一个数字。最后,我们比较这两个数字。 如果相同,则原数为二进制位回文数。

int isBitPalindrome(int x) {
    int reversed = 0, aux = x;
    while (aux > 0) {
        /* 
        Before doing that shifting reversed to 
        right, to build it from left to right. 
        Takes LSB of aux and puts it as LSB of reversed
        variable.
        */
        reversed = (reversed  << 1) | (aux & 1);

        /*
        Loop depends on number of bits in aux. Takes next bit into 
        LSB position by shifting aux right once.
        */
        aux = aux >> 1;
    }
    return (reversed  == x) ? 1 : 0;
}

关于c - 如何检查数字是否是位回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18940140/

相关文章:

c - 如何在 C 中编写递归延迟函数

c - 如何在 C 中将一个指令定义为另一个指令?

c - 如何从 printf 输出中删除最后一个空格

java - 如何在 C/C++ 中执行无符号右移(Java 中的 >>>)?

将 14 位转换为 8 位并返回

c# - 长期存储多个字符并恢复它们

c - 如何获得数字中最低有效位的值?

c - 如何设置/改变变量的绝对值?

我可以获得套接字缓冲区剩余大小吗?

将二进制数转换为十六进制的 C 程序无法转换两个以上的二进制数(如果它们等于十六进制字母)