জাভাতে বাইনারি বিন্যাসে একটি পূর্ণসংখ্যা মুদ্রণ করুন


277

আমার একটি নম্বর আছে এবং আমি এটি বাইনারিতে মুদ্রণ করতে চাই। অ্যালগরিদম লিখে আমি এটি করতে চাই না, জাভাতে এর জন্য কোনও বিল্ট-ইন ফাংশন আছে কি?

উত্তর:


434

ধরে নিচ্ছেন আপনার অর্থ "অন্তর্নির্মিত":

int x = 100;
System.out.println(Integer.toBinaryString(x));

পূর্ণসংখ্যার ডকুমেন্টেশন দেখুন ।

( Longএকটি অনুরূপ পদ্ধতি রয়েছে, BigIntegerএকটি উদাহরণ পদ্ধতি রয়েছে যেখানে আপনি মূলগুলি নির্দিষ্ট করতে পারেন))


2
এটি শীর্ষস্থানীয় 0 টি ছেড়ে চলেছে
আবু রুকাইয়াহ

1
@ আবু রাকাইয়াহ: ওপি কখনই শীর্ষস্থানীয় জিরোদের কথা উল্লেখ করেনি, এবং আমাদের জানতে হবে যে তারা একটি জিনিসের জন্য কতজন আশা করেছিল ...
জোন স্কিটে

@ আবুরাউকাইয়াহ আপনি যদি নেতৃস্থানীয় শূন্যগুলি চান তবে এখানে সিস্টেম.আউট.প্রিন্টফ () রয়েছে যা আপনাকে দুর্দান্ত নিয়ন্ত্রণ দেয়।
NomadMaker

246

এখানে কেবল বাইনারি বা অন্য কোনও ফর্ম্যাটের উপর নির্ভর করার দরকার নেই ... ফাংশনে অন্তর্নির্মিত একটি নমনীয় পাওয়া যায় যা আপনার প্রোগ্রামে আপনি যে কোনও ফর্ম্যাট মুদ্রণ করতে পারেন .. পূর্ণসংখ্যা.আর স্ট্রিং (অন্তর্নিহিত, উপস্থাপনা);

Integer.toString(100,8) // prints 144 --octal representation

Integer.toString(100,2) // prints 1100100 --binary representation

Integer.toString(100,16) //prints 64 --Hex representation

এটি বিভিন্ন সংখ্যা, নেতিবাচক, ধনাত্মক, বড়, ছোট দিয়ে পরীক্ষা করুন
টারটিয়াম

8
toBinaryStringদু'জনের পরিপূরক আউটপুট ব্যবহার করে, toStringনির্দিষ্ট বেসটিকে কভার করে এবং সামনে একটি নেতিবাচক চিহ্ন রাখে, তাইtoString(-8, 2) == "-1000"
জো 20


21

জিনিসগুলি সুন্দরভাবে মুদ্রণের জন্য এবং বিটগুলি প্রতিটি এন-বিটকে আলাদা করার জন্য আমার কিছু দরকার ছিল। অন্য কথায় নেতৃস্থানীয় শূন্যগুলি প্রদর্শন করুন এবং এর মতো কিছু দেখান:

n = 5463
output = 0000 0000 0000 0000 0001 0101 0101 0111

তাই আমি যা লিখেছি তা এখানে:

/**
 * Converts an integer to a 32-bit binary string
 * @param number
 *      The number to convert
 * @param groupSize
 *      The number of bits in a group
 * @return
 *      The 32-bit long bit string
 */
public static String intToString(int number, int groupSize) {
    StringBuilder result = new StringBuilder();

    for(int i = 31; i >= 0 ; i--) {
        int mask = 1 << i;
        result.append((number & mask) != 0 ? "1" : "0");

        if (i % groupSize == 0)
            result.append(" ");
    }
    result.replace(result.length() - 1, result.length(), "");

    return result.toString();
}

এটি এভাবে চালান:

public static void main(String[] args) {
    System.out.println(intToString(5463, 4));
}

কেন result.replace(result.length() - 1, result.length(), "");প্রয়োজন? আমরা intযেমন পাস করছি যা ইতিমধ্যে 32-বিট। আমরা দ্বিতীয় শেষ লাইনে কি প্রতিস্থাপন করছি?
পার্থ 13

1
@ পার্থ প্রতিটি পদক্ষেপে আমরা স্ট্রিংয়ের শেষে একটি স্পেস ক্যারেক্টার ("") যুক্ত করছি। আপনার উল্লিখিত লাইনটি সর্বশেষ সংযুক্ত স্থানের অক্ষর থেকে মুক্তি পাবে। মূলত, আপনি একই প্রভাব অর্জনের জন্য Stringশ্রেণীর trimফাংশনটি কল করতে পারেন ।
মাগৌমি

আপনি নম্বরে 0x100000000 যোগ একটি দীর্ঘ যেমন রূপান্তর, এবং তারপর নেতৃস্থানীয় 1. খারিজ করে আরও সহজভাবে এবং দক্ষতার সঙ্গে এই অনেক কিছু করতে পারেন
Lorne এর মার্কুইস

7

পুরানো স্কুল:

    int value = 28;
    for(int i = 1, j = 0; i < 256; i = i << 1, j++)
        System.out.println(j + " " + ((value & i) > 0 ? 1 : 0));

আমি মনে করি System.out.printlnএবং &অন্তর্নির্মিত হয়;)
ডেভিড উইলিয়ামস

1
ঠিক বুঝতে পেরেছি যে আমি উত্তরটির 3 বছর পরে মন্তব্য করেছি ... হ্যাঁ।
রাজুগাদু

7
public static void main(String[] args) 
{
    int i = 13;
    short s = 13;
    byte b = 13;

    System.out.println("i: " + String.format("%32s", 
            Integer.toBinaryString(i)).replaceAll(" ", "0"));

    System.out.println("s: " + String.format("%16s", 
            Integer.toBinaryString(0xFFFF & s)).replaceAll(" ", "0"));

    System.out.println("b: " + String.format("%8s", 
            Integer.toBinaryString(0xFF & b)).replaceAll(" ", "0"));

}

আউটপুট:

i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101

6

এই লজিকটি কোনও সংখ্যাকে কোনও বেসে রূপান্তর করতে পারে তা পরীক্ষা করে দেখুন

public static void toBase(int number, int base) {
    String binary = "";
    int temp = number/2+1;
    for (int j = 0; j < temp ; j++) {
        try {
            binary += "" + number % base;

            number /= base;
        } catch (Exception e) {
        }
    }
    for (int j = binary.length() - 1; j >= 0; j--) {
        System.out.print(binary.charAt(j));
    }
}

অথবা

StringBuilder binary = new StringBuilder();
int n=15;
while (n>0) {
    if((n&1)==1){
        binary.append(1);
    }else
        binary.append(0);
    n>>=1;
}
System.out.println(binary.reverse());

1
0 হিসাবে ইনপুট জন্য, `if (a == 0) inary বাইনারি.অ্যাপেন্ড (0); System.out.println (binary.toString ()); আসতে; `lo লুপ চলাকালীন আমাদের উপরের দ্বিতীয় সমাধানটিতে এই লাইনটি যুক্ত করা দরকার।
ইমরান

4

এটি একটি পূর্ণসংখ্যার অভ্যন্তরীণ বাইনারি উপস্থাপনা মুদ্রণের সহজতম উপায়উদাহরণস্বরূপ : যদি আমরা 17 হিসাবে n গ্রহণ করি তবে আউটপুটটি হবে: 0000 0000 0000 0000 0000 0000 001 0001 0001

void bitPattern(int n) {

        int mask = 1 << 31;
        int count = 0;
        while(mask != 0) {
            if(count%4 == 0)
                System.out.print(" ");

            if((mask&n) == 0) 

                System.out.print("0");



            else 
                System.out.print("1");


            count++;
            mask = mask >>> 1;


    }
    System.out.println();
}

4

কেবল এটি চেষ্টা করুন। সুযোগটি যদি প্রদত্ত পূর্ণসংখ্য মানের বাইনারি মানগুলি মুদ্রণ করে তবে। এটি ইতিবাচক বা নেতিবাচক হতে পারে।

      public static void printBinaryNumbers(int n) {
        char[] arr = Integer.toBinaryString(n).toCharArray();
        StringBuilder sb = new StringBuilder();
        for (Character c : arr) {
          sb.append(c);
        }
        System.out.println(sb);
      }

ইনপুট

5

আউটপুট

101


2

সমাধান 32 বিট ডিসপ্লে মাস্ক ব্যবহার করে,

public static String toBinaryString(int n){

    StringBuilder res=new StringBuilder();
    //res= Integer.toBinaryString(n); or
    int displayMask=1<<31;
    for (int i=1;i<=32;i++){
        res.append((n & displayMask)==0?'0':'1');
        n=n<<1;
        if (i%8==0) res.append(' ');
    }

    return res.toString();
}


 System.out.println(BitUtil.toBinaryString(30));


O/P:
00000000 00000000 00000000 00011110 

2

সহজ এবং বেশ সহজ সমাধান।

public static String intToBinaryString(int integer, int numberOfBits) {

    if (numberOfBits > 0) {     // To prevent FormatFlagsConversionMismatchException.

        String nBits = String.format("%" + numberOfBits + "s",      // Int to bits conversion
                Integer.toBinaryString(integer))
                .replaceAll(" ","0"); 

        return nBits;   // returning the Bits for the given int.
    }

    return null;        // if the numberOfBits is not greater than 0, returning null.
}

1

এই প্রশ্নের জন্য এখানে ইতিমধ্যে ভাল উত্তর পোস্ট করা হয়েছে। তবে, এইভাবে আমি নিজেকে চেষ্টা করেছি (এবং এটি সবচেয়ে সহজ যুক্তি ভিত্তিক → মডুলো / বিভাজন / যুক্ত হতে পারে ):

        int decimalOrBinary = 345;
        StringBuilder builder = new StringBuilder();

        do {
            builder.append(decimalOrBinary % 2);
            decimalOrBinary = decimalOrBinary / 2;
        } while (decimalOrBinary > 0);

        System.out.println(builder.reverse().toString()); //prints 101011001

0

প্রশ্নটি জাবাতে জটিল (এবং সম্ভবত অন্যান্য ভাষায়ও)।

একটি পূর্ণসংখ্যা 32-বিট স্বাক্ষরিত ডেটা টাইপ হয় তবে Integer.toBinaryString () স্বাক্ষরবিহীন হিসাবে পূর্ণসংখ্যার আর্গুমেন্টের একটি স্ট্রিং প্রতিনিধিত্ব করে বেস 2 তে পূর্ণসংখ্যা ।

সুতরাং, Integer.parseInt (Integer.toBinaryString (X), 2) একটি ব্যতিক্রম উত্পন্ন করতে পারে (স্বাক্ষরিত বনাম স্বাক্ষরযুক্ত)।

নিরাপদ উপায়টি হল Integer.toString (এক্স, 2) ব্যবহার করা; এটি কম মার্জিত কিছু তৈরি করবে:

-11110100110

কিন্তু এটি কাজ করে!!!


তিনি এটি মুদ্রণ করতে চান, এটি পার্স করে না not
লার্নের মারকুইস

System.out.println (Integer.toString (x, 2));
নিনজা

0

আমি মনে করি এটি এখন পর্যন্ত সবচেয়ে সহজ অ্যালগরিদম (যারা বিল্ট-ইন ফাংশন ব্যবহার করতে চান না তাদের জন্য):

public static String convertNumber(int a)  { 
              StringBuilder sb=new StringBuilder();
              sb.append(a & 1);
              while ((a>>=1) != 0)  { 
                  sb.append(a & 1);
               }
              sb.append("b0");
              return sb.reverse().toString();
  }

উদাহরণ:

রূপান্তর সংখ্যা (1) -> "0 বি 1 "

রূপান্তর সংখ্যা (5) -> "0b101"

রূপান্তর সংখ্যা (117) -> "0b1110101"

এটি কীভাবে কাজ করে: যখন লুপটি একটি সংখ্যাকে ডানে সরিয়ে দেয় (শেষ বিটটি দ্বিতীয়-শেষের সাথে প্রতিস্থাপন করে ইত্যাদি), সর্বশেষ বিটের মান পায় এবং স্ট্রিংবিল্ডারে রাখে, কোনও বিট বাকি না হওয়া পর্যন্ত পুনরাবৃত্তি করে (তখনই একটি = 0)।


0
    for(int i = 1; i <= 256; i++)
    {
        System.out.print(i + " "); //show integer
        System.out.println(Integer.toBinaryString(i) + " "); //show binary
        System.out.print(Integer.toOctalString(i) + " "); //show octal
        System.out.print(Integer.toHexString(i) + " "); //show hex

    }

3
উত্তরের জন্য অনেক ধন্যবাদ, তবে দয়া করে আরও বিবরণ এবং / বা তথ্য যুক্ত করুন এবং এটি কীভাবে জিজ্ঞাসিত সমস্যা সমাধান করে যাতে অন্যরা সহজেই স্পষ্টতা না জিজ্ঞাসা করে এটি বুঝতে পারে :)
koceeng

0

এইভাবে চেষ্টা করুন:

public class Bin {
  public static void main(String[] args) {
    System.out.println(toBinary(0x94, 8));
  }

  public static String toBinary(int a, int bits) {
    if (--bits > 0)
        return toBinary(a>>1, bits)+((a&0x1)==0?"0":"1");
    else 
        return (a&0x1)==0?"0":"1";
  }

}

10010100


0

বাম প্যাডযুক্ত জিরো সহ প্রদত্ত ইনট এক্স এর বাইনারি উপস্থাপনা:

org.apache.commons.lang3.StringUtils.leftPad(Integer.toBinaryString(x), 32, '0')

0

ইনপুট হিসাবে যে কোনও দশমিক সংখ্যা প্রবেশ করান। এর পরে প্রদত্ত ইনপুটটিকে বাইনারি সংখ্যায় রূপান্তর করতে আমরা মডুলো এবং বিভাগের মতো অপারেশন করি। বাইনারিতে পূর্ণসংখ্যার মানগুলিকে রূপান্তর করতে জাভা প্রোগ্রামের উত্স কোড এবং তার দশমিক সংখ্যার জন্য এই বাইনারিটির বিট সংখ্যা। জাভা প্রোগ্রামটি সফলভাবে সংকলিত এবং একটি উইন্ডোজ সিস্টেমে চালিত হয়। প্রোগ্রাম আউটপুটও নীচে প্রদর্শিত হবে।

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int integer ;
        String binary = "";    //   here we count "" or null 
                               //   just String binary = null;
        System.out.print("Enter the binary Number: ");
        integer = sc.nextInt();

        while(integer>0)
        {
            int x = integer % 2;
            binary = x + binary;
            integer = integer / 2;  
        }
        System.out.println("Your binary number is : "+binary);
        System.out.println("your binary length : " + binary.length());
    }
}

0

যেহেতু কোনও উত্তর গৃহীত হয়নি, সম্ভবত আপনার প্রশ্নটি ছিল বাইনারি-ফাইলে কোনও পূর্ণসংখ্যা কীভাবে সংরক্ষণ করবেন was java.io.DataOutputstream আপনি যা খুঁজছেন তা হতে পারে: https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html

DataOutputStream os = new DataOutputStream(outputStream);
os.writeInt(42);
os.flush();
os.close();

2
বেশিরভাগ সময় মুদ্রণের অর্থ কনসোলে কিছু লেখা, কোনও ফাইলে সংরক্ষণ করা নয়। আপনার উত্তরটি যদি কোনও ফাইলে ডেটা সিরিয়াল করতে বলা হয় তবে তা কার্যকর হতে পারে।
আলাইন-মিশেল চমনৌ এন

অবশ্যই, তবে যেহেতু প্রশ্নকর্তা কোনও উত্তরই গ্রহণ করছেন না আমি অনুমান করেছি যে তার প্রশ্নটি সঠিক নয়।
খ্রিস্টান চারবুলা

0

আপনি বিট মাস্কটি ব্যবহার করতে পারেন (1 << কে) এবং সংখ্যার সাথে করণ ও পরিচালনা করতে পারেন! 1 << কে পজিশনে এক বিট রয়েছে!

private void printBits(int x) {
    for(int i = 31; i >= 0; i--) {
        if((x & (1 << i)) != 0){
            System.out.print(1);
        }else {
            System.out.print(0);
        }
    }
    System.out.println();
}

-2

এটি স্বাক্ষরিত এবং স্বাক্ষরযুক্ত স্বাক্ষরিত মানগুলির সাথে কার্যকরভাবে ব্যবহৃত শক্তিশালী বিট ম্যানিপুলেশন নিয়ে কাজ করে এবং বাম দিকে প্রথম শূন্য উত্পন্ন করে।

public static String representDigits(int num) {

        int checkBit = 1 << (Integer.SIZE * 8 - 2 );    // avoid the first digit        
        StringBuffer sb = new StringBuffer();

        if (num < 0 ) {     // checking the first digit
            sb.append("1");
        } else {
            sb.append("0");
        }

        while(checkBit != 0) {          
            if ((num & checkBit) == checkBit){
                sb.append("1");
            } else {
                sb.append("0");
            }           
            checkBit >>= 1;     
        }       

        return sb.toString();
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.