当前位置: 首页 > news >正文

二进制中1的个数

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析

阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    public  int NumberOf1(int n) {if(n==0) {return 0;}int count=0;while(n!=0) {count++;n=n&(n-1);}return count;}

此解法是我在牛客网评论中看到的,确实是我所理解中最优的解法,下面我来分析一下此最优解法:

首先当二进制是0的时候直接返回0,这个毋庸置疑;

很多人第一眼看见会问代码里面没有考虑到负数的二进制情况(别急听我分析)

我们首先考虑正式,我们首先的情况所有的数不管是什么语言,其底层都是二进制编码,因为计算机只能读懂二进制.所以我们做题的时候根本不用考虑要不要将十进制转换成二进制的问题.

假设 n=22,那么它的二进制就是0001 0110 然后

进入循环-->

count=1,

n与(n-1)进行逻辑&运算-->0001 0110 & 0001 0101 -->0001 0100

(其实其本质就是从后面数1,数完一个1就把1拿掉,继续然后)

又进入循环-->

count=2,

n与(n-1)进行逻辑&运算-->0001 0100 & 0001 0011 -->0001 0000

又进入循环-->

count=3,

n与(n-1)进行逻辑&运算-->0001 0000 & 0000 1111 -->0000 0000

最后退出循环;

现在考虑负数,负数的话一共两步:

1.将负数先变成反码,

2.数它反码中1的个数,

第一步,操作系统已经帮我们做了,你觉得你还要干什么吗?

第二步,直接又是在二进制中数1的个数,不是一样的吗?难得正数的二进制和反码的二进制还有不同?

所以这题就这么简单的完美解决!

http://www.lryc.cn/news/289698.html

相关文章:

  • python+matlab text(按图的相对位置显示)
  • rust 引用/mut 的所有权
  • 油烟净化器科技改革,清新用餐生活
  • [足式机器人]Part3 机构运动学与动力学分析与建模 Ch01-1 刚体系统的运动学约束
  • 51单片机智能小车
  • 9. 嵌入式系统开发:安全性与可靠性设计模式---引言
  • 内网安全:Exchange服务
  • Flask介绍和优势
  • 喜报|「云原生数据库PolarDB」、「阿里云瑶池一站式数据管理平台」揽获“2023技术卓越奖”
  • 【动态规划】【字符串】【行程码】1531. 压缩字符串
  • 检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图
  • PHP语法
  • MySQL:三大日志(binlog、redolog、undolog)
  • 【QT+QGIS跨平台编译】之十二:【libpng+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • Windows 和 Anolis 通过 Docker 安装 Milvus 2.3.4
  • JUC并发编程与源码分析学习笔记(三)
  • 力扣日记1.28-【回溯算法篇】93. 复原 IP 地址
  • Java 的反射学习总结
  • 图论第二天|695. 岛屿的最大面积 1020. 飞地的数量 130. 被围绕的区域 417. 太平洋大西洋水流问题 827.最大人工岛
  • 【JavaScript 基础入门】02 JavaScrip 详细介绍
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之CheckboxGroup组件
  • 【极数系列】Flink配置参数如何获取?(06)
  • 【docker】linux系统docker的安装及使用
  • 【C++】一题掌握空指针
  • 初识HarmonyOS
  • 备战蓝桥杯---二分(入门)
  • 开发 Chrome 浏览器插件时进行 Vue3+Vite 多页面多入口配置
  • MacOS X 中 OpenGL 环境搭建 Makefile的方式
  • 前端工程化之:webpack1-6(编译过程)
  • javaweb学习问题集