You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中计算Two's (2's) Complement(二进制补码)

Python实现舵机驱动二进制补码转换

直接适配舵机驱动协议的补码计算方案,输入带符号整数直接输出符合要求的十六进制结果:

def servo_value_to_hex(signed_val: int, bit_width: int = 16) -> tuple[str, str]:
    """
    输入舵机控制的带符号整数值,返回(16位补码十六进制, 低8位十六进制)
    返回结果均为大写,无0x前缀
    """
    # 利用取模运算直接得到指定位宽补码对应的无符号值,无需手动取反加1
    unsigned_val = signed_val % (1 << bit_width)
    full_hex = f"{unsigned_val:0{bit_width//4}X}"
    low8_hex = full_hex[-2:]
    return full_hex, low8_hex

使用示例

# 对应需求里的-100测试用例
full_hex, low_byte_hex = servo_value_to_hex(-100)
print(full_hex)      # 输出: FF9C
print(low_byte_hex)  # 输出: 9C

逻辑说明

  • 计算逻辑完全匹配补码规则:指定位宽下,负数对2^位宽取模的结果,就是该数补码对应的无符号整数值,不需要额外写取反、加1的分支判断
  • 默认位宽16位,对应舵机常用的双字节控制指令格式,输出的4位十六进制和截断的低2位十六进制都满足使用要求
  • 如果协议要求小写十六进制,把格式化字符串里的X替换为x即可
  • 若后续需要适配其他位宽的指令格式,修改bit_width入参即可,比如8位补码传8、32位补码传32

参考规则

需在Python中实现的2's补码计算逻辑

内容的提问来源于stack exchange,提问作者Iver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 04:01:18