1. 程式人生 > >演算法—輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示

演算法—輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示

明確幾點:

計算機中資料儲存形式位二進位制位。

正數以原碼形式儲存

負數以補碼形式儲存

int型別資料,佔4個位元組,一個位元組8位,所以int型別佔32個二進位制位。

比如:9的原碼位     00001001  完整形式為00000000 00000000 00000000 00001001

對於負數求二進位制位,需要先求出其對應的正數的二進位制位。

比如:-5對應的正數5的二進位制原碼為,00000101   完整形式為00000000 00000000 00000000 00000101

           -5對應的正數5的二進位制反碼為,11111010    完整形式為 11111111  11111111  11111111   11111010

           -5對應的正數5的二進位制補碼=反碼+1,        完整形式為   11111111  11111111  11111111   11111011

思路:

每次將32位的每一個位依次置為1,和n相與,如果結果為1,表示這個位置為1,否則為0。

程式碼實現:

public static int NumberOf1(int n) {
    int sum=0;
    int index=1;
    while (index!=0){
        if ((n&index)!=0){
            sum++;
        }
        index=index<<1;
    }
    return sum;
}

相關推薦

演算法輸入一個整數輸出二進位制表示1個數其中負數補碼

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示! 明確幾點: 計算機中資料儲存形式位二進位制位。 正數以原碼形式儲存 負數以補碼形式儲存 int型別資料,佔4個位元組,一個位元組8位,所以int型別佔32個二進位制位。 比如:9的原碼位 

【劍指offer】輸入一個整數輸出二進位制表示1個數其中負數補碼

題目要求 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 核心思路 如果一個整數不為0,那麼這個整數至少有一位是1,如果把這個整數減1,那麼原來整數最右邊的1就會變為0,原來在1右邊的所有0都會變為1。那麼,利用n = n & (n - 1),

Java實現輸入一個整數輸出二進位制表示1個數

public class Test { // 利用Java內建toBinaryString方法來實現 public static int numberOfOne1(int n) { int count = 0; String

【C語言】輸入一個整數輸出二進位制表示1個數(三種方法)

輸入一個整數,輸出該數二進位制表示中1的個數。如輸入32,輸出1.程式碼實現:方法1:與運算#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; int FindOne

輸入一個整數輸出二進位制表示1個數其中負數補碼

如何求二進位制中1的個數(三種方法) 思路:1.在32位中,二進位制表示數字1方式為 00000000 00000000 00000000 00000001 首先我們的第一個方法就是一位一位的找,從左

python輸入一個整數輸出二進位制表示1個數

# -*- coding:utf-8 -*-classSolution:defNumberOf1(self, n):# write code here cnt =0if n<0: n = n &0xffffffffwhil

輸入一個整數輸出二進位制表示1個數其中負數補碼

思路:用位運算來做,與1,第一位保持不變,前面的置0,然後判斷,再右移 class Solution { public: int NumberOf1(int n) { int i = 0; int count = 0;

10.輸入一個整數輸出二進位制表示1個數其中負數補碼

題目:輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 因為線上筆試的話時間有限,本人也不一定寫的對,這裡就直接呼叫庫函式來將整數轉換成對應的二進位制表示了 public class

輸入一個整數輸出二進位制表示1個數其中負數補碼)--《劍指offer》

題目描述 輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。 有兩種解題思路: 1.因為題目給出的是int型別,java中的int型別用32位表示,把這個數依次無符號右移(考慮到負數

三種方式求: 輸入一個整數輸出二進制表示1個數其中負數補碼表示

情況 temp 進制數 二進制表示 pac print 類型 solution 方式 package com.example; public class Solution { /* * 轉化成2進制數計算 */ public int NumberOf1(int n) {

輸入一個整數輸出二進制表示1個數其中負數補碼表示

char bin obi int 表示 blog binary 補碼 charat public class Solution { public int NumberOf1(int n) { int count=0; String str=Integer.

輸入一個十進制整數輸出二進制表示1個數其中負數補碼表示

參考 public 原來 oct new 十六 原理 補碼 lin 《劍指offer》: 首先熟悉一下java自帶的進制之間轉換的api: /*java中進行二進制,八進制,十六進制,十進制間進行相互轉換十進制轉成十六進制:Integer.toHexString(int i

C++:從鍵盤輸入一個整數判斷是幾位數並且逆向輸出數字

#include using namespace std; int change(int n) //逆向輸出該數 {int rn; for(int i=0;i<10;i++) { if(n>0) { rn=rn*10+n%10; n=n/10;

面試題:輸入一個整數輸出整數二進位制1個數

程式碼:C語言 //輸入一個整數,輸出該整數二進位制中1的個數。其中負數用補碼錶示。 //左移運算子是用來將一個數的各二進位制位全部左移若干位。相當於乘法運算,表示為"<<" //右移運算子是用來將一個數的各二進位制位全部右移若干位。相當於除

*(5)輸入互不相同的一組整數,構造一棵二叉排序樹要求: ① 按遞減有序的順序輸出; ② 輸入一個整數,查詢該整數是否在二叉排序樹中,查詢成功返回1,否則返回0; ③ 在②中,若查詢成功則將

/*(5)輸入互不相同的一組整數,構造一棵二叉排序樹,要求: ① 按遞減有序的順序輸出; ② 輸入一個整數,查詢該整數是否在該二叉排序樹中,查詢成功返回1,否則返回0; ③ 在②中,若查詢成功,則將該結點從二叉排序樹中刪除。 */ #include<stdio.h&g

指標_習題:運用指標設計一個函式_輸入一個整數輸出其對應的16進位制

/* 運用指標設計一個程式_輸入一個整數,輸出其對應的16進位制數,要求用到函式 */# include <stdio.h>void tran(int *p){ printf("十進位制 %d 轉化成十六進位制為:%#X\n", *p, *p);}int main(void){ int num;

Java演算法總結:輸入一個整數整數二進位制表示有多少個1

    求一個整數的二進位制中1的個數。      題目:輸入一個整數,求該整數的二進位制表達中有多少個1。例如輸入10,由於其二進位制表示為1010,有兩個1,因此輸出2。      分析:這是一道很基本的考查位運算的面試題。包括微軟在內的很多公司都曾採用過這道題。 

12.15有一種數叫回文正讀和反讀都一樣如12321便是一個迴文編寫一個程式從命令列得到一個整數判斷是不是迴文

有一種數叫回文數,正讀和反讀都一樣,如12321便是一個迴文數。編寫一個程式,從命令列得到一個整數,判斷該數是不是迴文數 package Text6; import java.util.Scanner; public class Zuoyexuanzuo5 { public st

控制檯輸入一個整數整數的各位數判斷其是否能被整數整除能則返回true不能則返回false

這是出自美國中學的一道程式設計題,個人覺得對我這種初學者而言挺有意思的,就做了一下,這道題目的難點在於找出所輸入整數的各位數 package 練習題; import java.util.Scanner;

有一種數叫回文正讀和反讀都一樣如12321便是一個迴文編寫一個程式從命令列得到一個整數判斷是不是迴文

Scanner s = new Scanner(System.in); String t = s.next(); String[] a = new String[t.length()]; // System.out.println(t.length()); // System