一、要求

补数可以直接通过异或运算进行。

二、背景

最近工作中位运算遇到一个问题,温度有正负两种表示,而且还有小数点。例如用四个16进制字节表示,XXXX,其中第一位是占位符,中间两三位为温度的有效值,且最后一位的单位是16-1   从而可以表示出小数点。如果第二位中二进制最高位是1,那么表示这个数时负数,需要进行取反加1,即补数加1。下面在做完补数的基础上会生成一个小算法进行温度值得解析。

异或^:两位相异时值为1

与&:两位都为1时值为1

或|:有一个为1时结果为1

反~:第一位不变,后面的位全取反

三、思路

(1)对于计算补数,直接和对应为的值进行或运算。例如5表示101 ,101^111=010

所以只需要知道输入数的位数就可以进行补数找操作。

(2)温度数据的解析

当时一直卡壳在取反加1,特别是位运算中加1进位的问题,后来发现直接将得到的十进值加1即可

class Solution(object):
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
# value_len='1'*len(bin(num))-2
# value=sum([2^i for i in range(value_len)])
return num^int('1'*(len(bin(num))-2),2)
def hextemp2int(self,num):
'''
num:0113a401
用四个16进制字节表示,XXXX,其中第一位是占位符,中间两三位为温度的有效值,且最后一位的单位是16-1 从而可以表示出小数点。
如果第二位中二进制最高位是1,那么表示这个数时负数,需要进行取反加1,即补数加1
:param num:
:return:
'''
if ord(num[1])>55: # 负数
complement=((int(num[1::],16)^4095)+1)/16
return complement*-1
else: # 正数
return int(num[1::],16)/16 def inttemp2hex(self,data):
'''
十进制温度数据转16进制温度数据,两个字节表示,没有进行高低位取反.b代表二进制,d代表十进制,x代表16进制
:return:
'''
if data>=0:
return '{:04x}'.format(data*16)
else:
return '{:04x}'.format(data*16&0xFFFF)
if __name__ == "__main__": s = Solution() print('36的16进制表示方式%s'%s.inttemp2hex(36)) print('%s的10进制表示方式%s'%(s.inttemp2hex(36),s.hextemp2int(s.inttemp2hex(36))))

 测试结果如下:

  

LeetCode刷题7——数字的补数的更多相关文章

  1. C#LeetCode刷题之#136-只出现一次的数字(Single Number)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4046 访问. 给定一个非空整数数组,除了某个元素只出现一次以外, ...

  2. C#LeetCode刷题-位运算

    位运算篇 # 题名 刷题 通过率 难度 78 子集   67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 ...

  3. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  4. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  5. LeetCode刷题总结-树篇(中)

    本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...

  6. LeetCode刷题预备知识(二)

    Python四大数据结构的属性及方法 在LeetCode刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...

  7. LeetCode刷题总结-链表

    LeetCode刷题总结-链表 一.链表     链表分为单向链表.单向循环链表和双向链表,一下以单向链表为例实现单向链表的节点实现和单链表的基本操作. 单向链表 单向链表也叫单链表,是链表中最简单的 ...

  8. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  9. C#LeetCode刷题-树

    树篇 # 题名 刷题 通过率 难度 94 二叉树的中序遍历   61.6% 中等 95 不同的二叉搜索树 II   43.4% 中等 96 不同的二叉搜索树   51.6% 中等 98 验证二叉搜索树 ...

随机推荐

  1. SpringBoot统一异常处理后TX-LCN分布式事务无法捕获异常进行回滚

    通常我们使用SpringBoot都会进行统一异常处理,例如写一个BaseController,在BaseController里进行统一异常处理,然后其他的Controller都继承BaseContro ...

  2. mybatis中foreach使用方法

    作者:学无先后 达者为先 作者:偶尔记一下 foreach一共有三种类型,分别为List,[](array),Map三种. 下面表格是我总结的各个属性的用途和注意点. foreach属性 属性 描述 ...

  3. 本地资源图片无法通过 WXSS 获取,可以使用网络图片,或者 base64,或者使用<image/>标签

    在微信小程序开发中,当在CSS中使用背景图片格式为png时就会出现: 只要把png格式改掉就可以或者在<image/>标签里面写,我实测用JPG格式和把图片转成base64是没问题的.

  4. 微信小程序开发入门教程(二)---分析官方云开发例子中的一些功能

    接上一篇文章:https://www.cnblogs.com/pu369/p/11326538.html 1.官方云开发的例子中,点击获取 openid,对应代码在E:\wxDEV\helloyun\ ...

  5. Hdu 4333 Revolving Digits(Exkmp)

    Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...

  6. Linux之静态库

    命名规则: lib + 库的名字 + .a 制作步骤 生成对应.o文件  .c à .o 将生成的.o文件打包   ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o 发布 ...

  7. mac使用brew安装mysql报RROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    使用mac安装mysql安装完后运行 mysql -uroot -p 报了 ERROR 2002 (HY000): Can't connect to local MySQL server throug ...

  8. Leetcode题目238.除自身以外数组的乘积(中等)

    题目描述: 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: ...

  9. Imagetragick 命令执行漏洞(CVE-2016–3714)

    Imagetragick介绍: ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个 ...

  10. 带有时间间隔的dp

    Uberwatch 题意:一个人打一群敌人,每间隔时间m能释放一次大招,消灭这个时刻上的所有敌人,起始时刻开始计算冷却时间 solution: dp[i]=max(dp[i],dp[i-m]); /* ...