仅使用按位运算符实现转码

问题描述

我有对输入的十六进制数进行转码的功能。例如我有这样的数字的初始格式

Initial format

然后函数将其转码为这种格式:

Final format

我将使用十六进制内置函数函数的结果作为字符串返回。我试过这样的事情,但没有奏效:

def task22(number) -> str:
    """
    Returns transcoded hexadecimal string,this function uses bitwise operators to transcode given value
    :param number: hexadecimal number to transcode
    :return: Transcoded hexadecimal string
    """
    a = number & 0b111111111111111
    b = number & 0b111111111111111
    c = number & 0b11
    a = a << 17
    b = b >> 13
    c = c >> 30

    return hex(a | b | c)

如何使用按位运算符对数字进行转码?我需要使用按位向左和向右移位,但我不知道如何对上述格式执行此操作。

解决方法

解决了。问题是我需要使用按位 AND 运算符处理所有段,其中 32 个零(因为所有位的数量是 32)由 1 替换,其中每个段位于这样的位序列中:

def task22(number) -> str:
    """
    Returns transcoded hexadecimal string,this function uses bitwise operators to transcode given value
    :param number: hexadecimal number to transcode
    :return: Transcoded hexadecimal string
    """
    a = number & 0b00000000000000000111111111111111
    b = number & 0b00111111111111111000000000000000
    c = number & 0b11000000000000000000000000000000
    a = a << 17
    b = b >> 13
    c = c >> 30

    return hex(a | b | c)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...