剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)

1. 题目描述

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

2. 思路和方法

  使用移位(<<)和 “| & !”操作来实现。1的二进制是:前面都是0,最后一位为1。每次向左移位一下,使得flag的二进制表示中始终只有一个位为1,每次与n做位与操作,这样就相当于逐个检测n的每一位是否是1。unsigned int flag = 1;

3. C++核心代码

3.1 位运算

 1 class Solution {
 2 public:
 3      int  NumberOf1(int n) {
 4          int result = 0;
 5          unsigned int flag = 1;
 6          while(flag)
 7          {
 8              if(n&flag)
 9                  result++;
10              flag = flag<<1;
11          }
12          return result;
13      }
14 };

参考资料

https://blog.csdn.net/qq_28632639/article/details/87966115

原文地址:https://www.cnblogs.com/wxwhnu/p/11407508.html

时间: 2024-12-15 01:35:08

剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)的相关文章

【C语言】输入一个整数,输出该数二进制表示中1的个数(三种方法)

输入一个整数,输出该数二进制表示中1的个数.如输入32,输出1. 代码实现: 方法1:与运算 #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOneNumber(unsigned int num) {     int numberofOne = 0;     while (num)     {         num = num & (num - 1);         

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

输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: n &(n-1)把n的最右边的1去掉,用count++计算1的个数  eg: 101 & 100 = 100   1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int count = 0; 5             while(n!=0){ 6                 count++; 7                 n = n&

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

<剑指offer>: 首先熟悉一下java自带的进制之间转换的api: /*java中进行二进制,八进制,十六进制,十进制间进行相互转换十进制转成十六进制:Integer.toHexString(int i)十进制转成八进制Integer.toOctalString(int i)十进制转成二进制Integer.toBinaryString(int i)十六进制转成十进制Integer.valueOf("FFFF",16).toString()八进制转成十进制Integer.

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

public class Solution { public int NumberOf1(int n) { int index = 1; int number = 0; while(index!=0){ if((n & index)!=0) number++; index = index << 1; } return number; } } 先上第一种 两种方法.第一种,是用位运算,将1每次左移,和数字进行&运算,如果成功,则返回1.   第二种,将整数通过方法转换为二进制数,

三种方式求: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示

package com.example; public class Solution { /* * 转化成2进制数计算 */ public int NumberOf1(int n) { String string = Integer.toBinaryString(n); int count = 0; for (int i = 0;i < string.length();i++) { if (string.charAt(i) == '1') { count++; } } return count;

while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+……+n的结果, 否则输出“输入的数据有错误”。

import java.util.Scanner; /** * @author 蓝色以太 while循环操作,输入一个整数放入到变量n中, 如果这个整数大于0,那么计算1+2+3+--+n的结果, * 否则输出"输入的数据有错误". */ public class While2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("

编程练习:输入一个整除,输出该二进制表示中1的个数。负数用补码表示。

这个题有点不太适合Python,因为python的变量是没有类型声明的. 下面的代码值考虑正数情况: 1 #!/usr/bin/env python3 2 3 def count_1(num): 4 count = 0 5 while num != 0: 6 count += 1 7 print(count) 8 num = num & (num-1) 9 return count 10 11 if __name__ == "__main__": 12 print(count_

剑指offer11

package jianzhiOffer; /**  * 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.  * @author user  *  */ public class ch11 { /*  * 使用Java提供的toBinaryString()来实现  * public static String toBinaryString(int i)以二进制(基数 2)无符号整数  * 形式返回一个整数参数的字符串表示形式.  */ public static int Numb

【剑指offer】七,二进制表示中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 1 public class Solution { 2 public int NumberOf1(int n) { 3 int count = 0 ; 4 while(n!=0){ 5 count++ ; 6 n = n&(n-1) ; 7 } 8 return count ; 9 }