LeetCode 1009. 十进制整数的反码(位运算)
发布日期:2021-07-01 03:15:38
浏览次数:2
分类:技术文章
本文共 812 字,大约阅读时间需要 2 分钟。
1. 题目
每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 “101”,11 可以用二进制 “1011” 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。
二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 “101” 的二进制反码为 “010”。
给定十进制数 N,返回其二进制表示的反码所对应的十进制整数。
2. 解题
- 求出二进制的非零位数,再用32减去它,左移这么多位(高位没了),取反(结果+111…),再右移这么多位(末位的111…去掉了)
class Solution { public: int bitwiseComplement(int N) { if(N == 0) return 1; int bits = 32, Nc = N; while(Nc) { bits--; Nc >>= 1; } return ~(N << bits) >> bits; }};
一个数和它的反码之和等于 2 n − 1 , n 表 示 二 进 制 位 数 2^n-1,\quad n表示二进制位数 2n−1,n表示二进制位数
class Solution { public: int bitwiseComplement(int N) { if(N == 0) return 1; int bits = 0, Nc = N; while(Nc) { bits++; Nc >>= 1; } return (1 << bits) - 1 - N; }};
转载地址:https://michael.blog.csdn.net/article/details/101197758 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月16日 11时31分56秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【大数据开发】Java基础 -总结21-Hashmap和HashTable的区别
2019-05-01
Azkaban体系结构
2019-05-01
机器学习之重头戏-特征预处理
2019-05-01
synchronized底层实现及锁的升级、降级
2019-05-01
PermGen space-永久区内存溢出
2019-05-01
Maven继承和聚合
2019-05-01
Apache Kafka:优化部署的 10 种最佳实践
2019-05-01
Leetcode 35. 搜索插入位置 c#
2019-05-01
[9] JMeter-常用函数的使用
2019-05-01
[12] JMeter-结果分析之图形图表
2019-05-01
使用aspose.words 18.6实现pdf文档转换
2019-05-01
Java数组详解
2019-05-01
vs中动态DLL与静态LIB工程中加入版本信息的方法
2019-05-01
大数据分析技术与应用一站式学习(值得收藏)_v20200418
2019-05-01
Qt 在windows下的串口读写
2019-05-01
SpringApplication执行流程
2019-05-01
自定义Starter
2019-05-01