📜  设置给定数字的第K位(1)

📅  最后修改于: 2023-12-03 14:57:39.618000             🧑  作者: Mango

设置给定数字的第K位

在程序开发中,经常需要操作二进制数、八进制数和十六进制数。设置给定数字的第K位是一种经常用到的操作。本文将介绍如何用代码实现这种操作。

设置二进制数的第K位

假设要设置二进制数b的第k位为1,可以将数b和一个数mask进行“或”操作,其中mask的第k位为1,其他位为0。代码如下:

def set_bit(b, k):
    mask = 1 << k
    return b | mask

对于二进制数b = 1010,设置第2位为1,可以调用set_bit(b, 2),返回结果为1110。

>>> set_bit(0b1010, 2)
14
设置八进制数的第K位

在Python中,八进制数以0开头。假设要设置八进制数o的第k位为1,可以将数o和一个数mask进行“或”操作,其中mask的第k位为1,其他位为0。代码如下:

def set_octal_bit(o, k):
    mask = 1 << (k * 3)
    return o | mask

对于八进制数o = 52(二进制位101010),设置第2位为1,可以调用set_octal_bit(o, 2),返回结果为62(二进制位111110)。

>>> set_octal_bit(0o52, 2)
62
设置十六进制数的第K位

在Python中,十六进制数以0x开头。假设要设置十六进制数h的第k位为1,可以将数h和一个数mask进行“或”操作,其中mask的第k位为1,其他位为0。代码如下:

def set_hex_bit(h, k):
    mask = 1 << (k * 4)
    return h | mask

对于十六进制数h = 0x2F(二进制位101111),设置第2位为1,可以调用set_hex_bit(h, 2),返回结果为0x2F(二进制位101111)。

>>> hex(set_hex_bit(0x2F, 2))
'0x2f'
总结

设置给定数字的第K位是一种常见的操作,它可以用于二进制数、八进制数和十六进制数。在Python中,可以使用位运算符和位移操作来实现这个功能。需要注意的是,对于符号位为1的二进制数,使用左移操作可能会导致数字溢出。