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


86

আপনি কীভাবে হেক্সাডেসিমাল বা অষ্টাল মধ্যে একটি পূর্ণসংখ্যা ধ্রুবক সংজ্ঞায়িত করতে পারেন তার অনুরূপ, আমি এটি বাইনারি করতে পারি?

আমি স্বীকার করি এটি একটি খুব সহজ (এবং বোকা) প্রশ্ন is আমার গুগল অনুসন্ধানগুলি খালি আসছে।


4
শুধু এফওয়াইআই, প্রতিটি প্রোগ্রামিং ভাষায়, প্রতিবাদটি হেক্সে বাইনারি কনস্ট্যান্ট লিখতে হয়, এবং আসল বাইনারি স্ট্রিং নয়।
অ্যাবিক্স

4
ঠিক আছে, তবে আমি কল্পনা করি কারণ হেক্স হ'ল নিকটতম জিনিস উপলভ্য, বাইনারিতে কোনও সমস্যা আছে বলে নয়। যে ভাষাগুলিতে আমি বাইনারি আক্ষরিক সমর্থন করে সেগুলিতে আমি মনে করি না যে কনভেনশনটি এই বৈশিষ্ট্যটিকে উপেক্ষা করবে।
কেন


বছর 2017: স্বীকৃত উত্তর অবশ্যই রাশ সরবরাহ করেছে। : দেখুন stackoverflow.com/a/1692932/716079
Lourenco

উত্তর:


66

সুতরাং, জাভা এসই 7 প্রকাশের সাথে, বাইনারি স্বাক্ষরটি বাক্সের বাইরে স্ট্যান্ডার্ড। বাইনারি সম্পর্কে আপনার যদি ভাল ধারণা থাকে তবে সিনট্যাক্সটি বেশ সোজা এবং সুস্পষ্ট:

byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111; 
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;

এবং বিশেষত শ্রেণি স্তরের ভেরিয়েবলগুলি বাইনারি হিসাবে ঘোষণার পয়েন্টে, বাইনারি স্বরলিপি ব্যবহার করে কোনও স্ট্যাটিক ভেরিয়েবল শুরু করার ক্ষেত্রে একেবারেই সমস্যা নেই:

public static final int thingy = 0b0101;

খুব বেশি ডেটা দিয়ে সংখ্যাগুলি উপচে না পড়তে কেবল সতর্ক হন, অন্যথায় আপনি একটি সংকলক ত্রুটি পাবেন:

byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte

এখন, আপনি যদি সত্যিই অভিনবতা পেতে চান তবে আপনি জাভা in-তে সেই অন্যান্য ঝরঝরে নতুন বৈশিষ্ট্যটিকে আন্ডারস্কোর সহ সংখ্যাসূচক আখ্যায়িত হিসাবে একত্রিত করতে পারেন। আক্ষরিক আন্ডারস্কোর সহ বাইনারি স্বরলিপিগুলির এই অভিনব উদাহরণগুলি একবার দেখুন:

int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;

এখন কি খুব সুন্দর এবং পরিষ্কার নয়, উচ্চ পাঠযোগ্য বলে উল্লেখ করা যায় না?

আমি এই কোড স্নিপেটগুলি টেক্সার উপর থের সার্ভারসাইটে লিখেছিলাম এমন একটি নিবন্ধ থেকে টেনেছি। আরও বিশদ জন্য এটি নির্দ্বিধায় দেখুন:

জাভা 7 এবং বাইনারি নোটেশন: ওসিপি জাভা প্রোগ্রামার (ওসিপিজেপি) পরীক্ষায় দক্ষতা অর্জন করছে


4
কেন আপনার বাইট ডেটা = 0b0000110011; 10 বিট আছে? আমি প্রোগ্রামিং এ নতুন তবে আমার মনে হয় বাইট ডেটা টাইপের 8 বিট ফিট করার জন্য এটি 0b00110011 এর মতো হওয়া উচিত।
মাইক

4
মাইকের মতো একই বিস্মিত যে কারও জন্য, কারণ সংকলক এটি প্রতিনিধিত্ব করে এমন সংখ্যায় রূপান্তর করে - আপনার দশকের দশমিক শীর্ষ জিরো থাকতে পারে এবং তারা আসল মানকে প্রভাবিত করবে না। সংকলন প্রক্রিয়াটি মূলত একই রকম যেমন আপনি সেখানে দশমিক লিখেছিলেন।
লুক ব্রিগেস

4
সংজ্ঞা অনুসারে আদিম টাইপ বাইট 256 নম্বর -128 থেকে 127 (-128 থেকে -1 এবং 0 থেকে 127) এর মধ্যে সঞ্চয় করতে পারে। তবে বাইনারি আক্ষরিক ব্যবহার করে কীভাবে -128 উপস্থাপন করবেন। যেমন বাইট খ = -0b1111111; -127 বোঝায় তবে -128 কী?
নির্মলসিংহ

152

জাভা 7 এ:

int i = 0b10101010;

জাভার পুরানো সংস্করণগুলিতে কোনও বাইনারি লিটারাল নেই (বিকল্পের জন্য অন্যান্য উত্তর দেখুন)।


33
আমি আরও উল্লেখ করতে চাই _যে ক্রমটি আরও পঠনযোগ্য করার জন্য অক্ষরগুলি থাকতে পারে: int i = 0b1010_1010_0011;
ব্যবহারকারী 12345613

@ রাস 0 বি এখানে কি বোঝায়? জাভা 7 এ এই বৈশিষ্ট্যটি কী বলা হয়?
গিক

4
0 বি বাইনারি বোঝায়। বৈশিষ্ট্যটিকে বাইনারি আক্ষরিক
রাশ

4
বাইনারি তথ্য এই নতুন উপস্থাপনা ভালবাসা। স্ট্রিং প্রতিনিধিত্ব পড়া খুব কঠিন হবে। গৃহীত উত্তরের পার্থক্য এবং "@ ব্যবহারকারীর 12345613" এর মধ্যে দেখুন। তার জন্য +1
মার্সেলো ডি বিক্রয়

54

জাভাতে কোনও বাইনারি আক্ষরিক নেই, তবে আমি মনে করি আপনি এটি করতে পারেন (যদিও আমি বিষয়টি দেখতে পাচ্ছি না):

int a = Integer.parseInt("10101010", 2);

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

4
জাভা 7 সাল থেকে, রাশ হ্যাওয়ার্ডের উত্তরটি সঠিক উত্তর। জাভা 7 এর আগে, আপনি পুরানো জাভা সংস্করণ (অষ্টাল, দশমিক, বা হেক্সাডেসিমাল) দ্বারা স্বীকৃত একটি স্বরলিপিতে বাইনারি রূপান্তর করতে আপনি একটি অনলাইন সরঞ্জাম বা আপনার প্রিয় ক্যালকুলেটর ব্যবহার করতে পারেন। যদি অন্য একটি রেডিক্স ব্যবহার করা হয়, তবে বাইনারি উপস্থাপনা সম্বলিত একটি বর্ণনামূলক মন্তব্য পাঠকদের জন্য মূল্য স্পষ্ট করার জন্য ঘোষণাপত্রে রাখা যেতে পারে।
জেসন সি

এটি একটি বরং নোংরা সমাধান, তাই না? আপনি কেবল 1 বাইট উপস্থাপন করতে 16 বাইট নিচ্ছেন (দ্বিতীয় যুক্তি এবং রূপান্তর গণনা করছে না)। অবশ্যই, যদি না সংকলক এটি অনুকূল করে না, যা আমি সন্দেহ করি।
টোমা জ্যাটো - মনিকা

@ টম্যাজাটো: হ্যাঁ, এটি তবে আপনি কী সমাধানের পরামর্শ দিবেন যখন আমি এই উত্তরটি লিখি তখন ভাষা বাইনারি আক্ষরিক সমর্থন করে না? রাশ হ্যাওয়ার্ডের এখন গ্রহণযোগ্য উত্তর হওয়া উচিত।
এড এস

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

18

এড সোয়াংগ্রেনের উত্তর

public final static long mask12 = 
  Long.parseLong("00000000000000000000100000000000", 2);

ঠিকভাবে কাজ করে. আমি longপরিবর্তে ব্যবহার করেছিলাম intএবং বিট মাস্ক হিসাবে সম্ভাব্য ব্যবহারগুলি স্পষ্ট করতে মডিফায়ারগুলি যুক্ত করেছি। যদিও এই পদ্ধতির সাথে দুটি অসুবিধা রয়েছে।

  1. এই সমস্ত শূন্যের সরাসরি টাইপ করা ত্রুটিযুক্ত প্রবণ
  2. উন্নয়নের সময় দশমিক বা হেক্স ফর্ম্যাটে ফলাফল পাওয়া যায় না

আমি বিকল্প পদ্ধতির পরামর্শ দিতে পারি

public final static long mask12 = 1L << 12;

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

long YourClassName.mask12 = 4096 [0x1000]

Eclipse এ প্রদর্শিত হবে। আপনি আরও জটিল স্থির হিসাবে সংজ্ঞা দিতে পারেন:

public final static long maskForSomething = mask12 | mask3 | mask0;

বা স্পষ্টভাবে

public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);

চলকটির মানটি maskForSomethingএখনও বিকাশের সময়ে গ্রহপসে পাওয়া যাবে।


উজ্জ্বল সমাধান! (সর্বজনীন চূড়ান্ত স্থির দীর্ঘ মাস্ক 12 = 1 এল << 12;)
জাইরো 117

17

মাস্কিংয়ের ক্ষেত্রে বাইনারি কনস্ট্যান্ট ব্যবহার করা

ধ্রুবকগুলি ঘোষণা করুন:

public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;

এবং তাদের ব্যবহার

if( (value & ( FLAG_B | FLAG_D )) != 0){
    // value has set FLAG_B and FLAG_D
}

12

গুগলে "জাভা লিটারালস সিনট্যাক্স" অনুসন্ধান করুন এবং আপনি কিছু এন্ট্রি নিয়ে এসেছেন।

এখানে একটি অষ্টাল সিনট্যাক্স রয়েছে (0 এর সাথে আপনার সংখ্যাটি উপসর্গ), দশমিক সিনট্যাক্স এবং একটি "0x" উপসর্গ সহ হেক্সাডেসিমাল সিনট্যাক্স। কিন্তু বাইনারি স্বরলিপি জন্য কোন বাক্য গঠন।

কিছু উদাহরণ:

int i = 0xcafe ; // hexadecimal case
int j = 045 ;    // octal case
int l = 42 ;     // decimal case

4
এটি প্রশ্নের উত্তর দেয় না।
মাইকেল ম্যাকউকেড

বছর 2017: ভাগ্যক্রমে বাইনারি প্রতিনিধিত্বের জন্য স্বীকৃতি রয়েছে। এটি "0 বি" দিয়ে শুরু হয়। উদাহরণ: byte b = 0b01000001(আরও ভাল প্রস্তুতির জন্য byte b = 0b0100_0001)।
Lourenco

2

আপনি যদি প্রচুর বাইনারি নিয়ে আশপাশ করতে চান তবে আপনি কিছু ধ্রুবককে সংজ্ঞায়িত করতে পারেন:

public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;

ইত্যাদি

বা

public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;

0

সামান্য আরও বিশ্রী উত্তর:

public class Main {

    public static void main(String[] args) {
        byte b = Byte.parseByte("10", 2);
        Byte bb = new Byte(b);
        System.out.println("bb should be 2, value is \"" + bb.intValue() + "\"" );
    }

}

কোন ফলাফল [জাভা] বিবি 2 হওয়া উচিত, মান "2"

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