জাভাতে ^ অপারেটর কী করে?


294

^(ক্যারেট) অপারেটর জাভাতে কোন কাজ করে ?

যখন আমি এটি চেষ্টা করি:

int a = 5^n;

... এটি আমাকে দেয়:

এন = 5 এর জন্য, 0 কে
এন = 4 এর জন্য প্রদান করে, 1 টি
এন = 6 এর জন্য প্রদান করবে, 3 প্রদান করবে

... সুতরাং আমি অনুমান করি যে এটি ক্ষয়ক্ষতি প্রদর্শন করে না। তবে কি তাহলে?


5
আপনি যে প্রকৃত কোডটি ব্যবহার করছেন তা কি পোস্ট করতে পারেন?
অ্যান্টনি ফোরলনি

আমি গ্রহণ করছি এবং এটি প্রত্যাবর্তন করছে ১১. পাবলিক ক্লাস সিম্পলপার্সার {পাবলিক স্ট্যাটিক শূন্য মূল (স্ট্রিং [] আরগস) {System.out.println ((10 ^ 1)); }}

2
জাভাতে, ^অপারেটরটি পাওয়ার সেটের জন্য নয়। Math.powপরিবর্তে আপনার প্রয়োজন হবে। পলিজেনিউব্রিকেন্টের উত্তর দেখুন See
অ্যান্টনি ফোরলনি

@ উইজার্ডঅফডস: সম্মত হয়েছেন, এটি একটি ভাল প্রশ্ন (ক্ষয়ক্ষতির ^জন্য? এটি কেবল সাধারণ জ্ঞান!)। জাভা ভাষার ওপি'র অনুসন্ধানের জন্য উত্সাহ দেওয়া দরকার।
বহুবৃক্ষের পদার্থ

উত্তর:


419

জাভাতে ^ অপারেটর

^ জাভাতে একচেটিয়া-বা ("xor") অপারেটর।

আসুন 5^6উদাহরণ হিসাবে নেওয়া যাক :

(decimal)    (binary)
     5     =  101
     6     =  110
------------------ xor
     3     =  011

এটি বিটওয়াইজ ( জেএলএস 15.22.1 ) এবং লজিক্যাল ( জেএলএস 15.22.2 ) জোর জন্য সত্য সারণী :

^ | 0 1      ^ | F T
--+-----     --+-----
0 | 0 1      F | F T
1 | 1 0      T | T F

আরও সহজভাবে, আপনি জোরকে "এটি বা এটি, তবে উভয়ই নয় !" হিসাবে ভাবতে পারেন ।

আরো দেখুন


জাভাতে ক্ষয়ক্ষতি

পূর্ণসংখ্যার ক্ষয়ক্ষতি হিসাবে, দুর্ভাগ্যক্রমে জাভাতে এমন কোনও অপারেটর নেই। আপনি ব্যবহার করতে পারেন double Math.pow(double, double)( intপ্রয়োজনে ফলাফল কাস্টিং )।

আপনি দু'জনের কয়েকটি পাওয়ার গণনা করতে প্রচলিত বিট-শিফটিং ট্রিকটিও ব্যবহার করতে পারেন। এটি হ'ল, কে- দশমিক শক্তির জন্য (1L << k)দুটি ।k=0..63

আরো দেখুন


মার্জ নোট : এই উত্তর আরেকটি প্রশ্ন যেখানে উদ্দেশ্য exponentiation ব্যবহার করার জন্য একটি স্ট্রিং রূপান্তর করতে ছিল থেকে মিশে গেছে"8675309"করারintব্যবহার না করেইInteger.parseInt(ক প্রোগ্রামিং ব্যায়াম যেমন^এখন থেকে -এর মানে exponentiation)। ওপির উদ্দেশ্য ছিল গণনা করা8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0 = 8675309; এই উত্তরের পরবর্তী অংশে সম্বোধন করা হয় যে এই কাজের জন্য ক্ষয়ক্ষতি জরুরি নয়।

হর্ণার স্কিম

আপনার নির্দিষ্ট প্রয়োজনকে সম্বোধন করার জন্য, আপনাকে 10 এর বিভিন্ন শক্তির গণনা করার দরকার নেই আপনি হর্নারের প্রকল্প যাকে বলা হয় এটি ব্যবহার করতে পারেন যা কেবল সহজ নয়, দক্ষ।

যেহেতু আপনি এটি ব্যক্তিগত অনুশীলন হিসাবে করছেন, আমি জাভা কোডটি দেব না, তবে এখানে মূল ধারণাটি রয়েছে:

8675309 = 8*10^6 + 6*10^5 + 7*10^4 + 5*10^3 + 3*10^2 + 0*10^1 + 9*10^0
        = (((((8*10 + 6)*10 + 7)*10 + 5)*10 + 3)*10 + 0)*10 + 9

এটি প্রথমে জটিল দেখাতে পারে তবে এটি আসলে তা নয়। আপনি মূলত অঙ্কগুলি বাম থেকে ডানদিকে পড়েন এবং পরবর্তী অঙ্কটি যুক্ত করার আগে আপনি নিজের ফলাফলটি এখন পর্যন্ত 10 দ্বারা গুণাবেন।

টেবিল আকারে:

step   result  digit  result*10+digit
   1   init=0      8                8
   2        8      6               86
   3       86      7              867
   4      867      5             8675
   5     8675      3            86753
   6    86753      0           867530
   7   867530      9          8675309=final

16
কেবল এই উত্তরটি যুক্ত করতে, ওপি যে ফাংশনটির সন্ধান করছে তা সম্ভবত ম্যাথ.পো (10, 1)
tjohns20

146

অনেক লোক ইতিমধ্যে চিহ্নিত করেছে, এটি এক্সওআর অপারেটর। অনেক লোক ইতিমধ্যে চিহ্নিত করেছে যে আপনি যদি ক্ষয়ক্ষতি চান তবে আপনার ম্যাথ.পো ব্যবহার করা দরকার

তবে আমি মনে করি এটি নোট করাও দরকারী যে ^কেবলমাত্র অপারেটরদের মধ্যে একটি পরিবার যা সম্মিলিতভাবে বিটওয়াইজ অপারেটর হিসাবে পরিচিত:

Operator    Name         Example     Result  Description
a & b       and          3 & 5       1       1 if both bits are 1.
a | b       or           3 | 5       7       1 if either bit is 1.
a ^ b       xor          3 ^ 5       6       1 if both bits are different.
~a          not          ~3          -4      Inverts the bits.
n << p      left shift   3 << 2      12      Shifts the bits of n left p positions. Zero bits are shifted into the low-order positions.
n >> p      right shift  5 >> 2      1       Shifts the bits of n right p positions. If n is a 2's complement signed number, the sign bit is shifted into the high-order positions.
n >>> p     right shift  -4 >>> 28   15      Shifts the bits of n right p positions. Zeros are shifted into the high-order positions.

থেকে এখানে

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


34

এটি বিটওয়াইজ এক্সওআর, জাভাতে এক্সপেনসিয়েশন অপারেটর নেই, Math.pow()পরিবর্তে আপনাকে ব্যবহার করতে হবে।


20

এক্সওআর অপারেটর বিধি =>

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

4, 5 এবং 6 এর বাইনারি উপস্থাপনা:

4 = 1 0 0 
5 = 1 0 1
6 = 1 1 0

এখন, 5 এবং 4 এ XOR অপারেশন করুন:

     5 ^ 4 => 1  0  1   (5)
              1  0  0   (4)
            ----------
              0  0  1   => 1

একইভাবে,

5 ^ 5 => 1   0   1    (5)
         1   0   1    (5)
       ------------
         0   0   0   => (0)


5 ^ 6 => 1   0   1  (5)
         1   1   0  (6)
        -----------
         0   1   1  => 3


15

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

  • বুলিয়ান অ্যারেতে সমস্ত উপাদানগুলির এক্সওরিং আপনাকে বলবে যে অ্যারেতে বিজড়িত সংখ্যক সত্য উপাদান রয়েছে
  • আপনার যদি এমন একটি অ্যারে থাকে যা সমস্ত সংখ্যার বারবার পুনরাবৃত্তি করে যা একাধিকবার অদ্ভুত সংখ্যার পুনরাবৃত্তি করে তবে আপনি খুঁজে পেতে পারেন যে সমস্ত উপাদানগুলিকে XORing করে।
  • অস্থায়ী পরিবর্তনশীল ব্যবহার না করে মান অদলবদল করা
  • 1 থেকে n এর পরিসরে নিখোঁজ নম্বর সন্ধান করা
  • নেটওয়ার্কের মাধ্যমে ডেটা পাঠানোর প্রাথমিক বৈধতা।

বিট বুদ্ধিমান অপারেটরগুলি, অন্বেষণে আকর্ষণীয় বিষয় ব্যবহার করে এ জাতীয় অনেকগুলি কৌশল করা যেতে পারে।


14

অন্যরা যেমন বলেছে, এটি কিছুটা XOR। আপনি যদি একটি প্রদত্ত শক্তিতে একটি সংখ্যা বাড়াতে চান তবে ব্যবহার করুন Math.pow(a , b), aএকটি সংখ্যা কোথায় এবং bশক্তি।


13

এক্সওআর অপারেটরের বিধি

0 ^ 0 = 0
1 ^ 1 = 0
0 ^ 1 = 1
1 ^ 0 = 1

বিটওয়াস অপারেটর বিটগুলিতে কাজ করে এবং বিট-বাই-বিট অপারেশন করে। ধরুন যদি a = 60 এবং b = 13; এখন বাইনারি ফর্ম্যাট এ তারা নিম্নলিখিত হবে -

a = 0011 1100

b = 0000 1101



a^b ==> 0011 1100  (a)
        0000 1101  (b)
        -------------  XOR
        0011 0001  => 49

(a ^ b) will give 49 which is 0011 0001

8

আরকের লিঙ্কটি এক্সক্লুসিভ-বা সংজ্ঞা নির্দেশ করে, যা ব্যাখ্যা করে যে এই ফাংশনটি কীভাবে দুটি বুলিয়ান মানের জন্য কাজ করে।

হারিয়ে যাওয়া তথ্যের টুকরোটি এটি কীভাবে দুটি পূর্ণসংখ্যার (বা পূর্ণসংখ্যার ধরণের মান) এর ক্ষেত্রে প্রযোজ্য। বিটওয়াইজ এক্সক্লুসিভ-বা দুটি সংখ্যায় সংশ্লিষ্ট বাইনারি অঙ্কের জোড়াতে প্রয়োগ করা হয় এবং ফলাফলগুলি একটি পূর্ণসংখ্যার ফলাফলের সাথে পুনরায় একত্রিত হয়।

আপনার উদাহরণ ব্যবহার করতে:

  • 5 এর বাইনারি উপস্থাপনা 0101।
  • 4 এর বাইনারি উপস্থাপনাটি 0100।

বিটওয়াইজ এক্সওরকে সংজ্ঞায়নের একটি সহজ উপায়টি বলা হয় যে দুটি জায়গায় ইনপুট সংখ্যার পার্থক্য রয়েছে এমন প্রতিটিতে ফলাফলের 1 টি রয়েছে।

4 এবং 5 দিয়ে, একমাত্র পার্থক্যটি শেষ স্থানে; সুতরাং

0101 ^ 0100 = 0001 (5 ^ 4 = 1)।




7

এটি জাভাতে বিটওয়াইজ জোর অপারেটর যা বিটের বিভিন্ন মানের জন্য (যেমন 1 ^ 0 = 1) 1 এবং বিটের একই মানের জন্য 0 (যেমন 0 ^ 0 = 0) ফলাফল হয় যখন কোনও সংখ্যা বাইনারি আকারে লেখা হয়।

প্রাক্তন: -

আপনার উদাহরণ ব্যবহার করতে:

5 এর বাইনারি প্রতিনিধিত্ব 0101. 4 এর বাইনারি উপস্থাপনা 0100 is

বিটওয়াইজ এক্সওরকে সংজ্ঞায়িত করার একটি সহজ উপায়টি বলা হয় যে দুটি জায়গায় ইনপুট সংখ্যার পার্থক্য রয়েছে এমন জায়গায় প্রতি 1 টি ফলাফল রয়েছে।

0101 ^ 0100 = 0001 (5 ^ 4 = 1)।


6

কারণ আপনি xor অপারেটর ব্যবহার করছেন।

জাভাতে, বা অন্য কোনও ভাষা সম্পর্কে, ^ বিটওয়াইজ জোর, তাই অবশ্যই,

10 ^ 1 = 11. বিটওয়াইজ অপারেটর সম্পর্কে আরও তথ্য

এটি আকর্ষণীয় যে কীভাবে জাভা এবং সি # এর পাওয়ার অপারেটর নেই।


2

এটি জাভাতে বিটওয়াইজ জোর অপারেটর যা বিভিন্ন মানের জন্য (যেমন 1 ^ 0 = 1) 1 এবং একই মানের (যেমন 0 ^ 0 = 0) এর ফলাফল 1।


2

বাইনারি হয় (বেস -২ তে যেমন) এক্সওর, এক্সপেনশনেশন নয় (যা জাভা অপারেটর হিসাবে উপলব্ধ নয়)। ক্ষমতার জন্য java.lang.Math.pow () দেখুন।


2

এটি এক্সওআর অপারেটর। এটি সংখ্যায় বিট অপারেশন করতে ব্যবহৃত হয়। এর আচরণটি এমন হয় যে আপনি যখন একই বিটগুলিতে একটি জোর অপারেশন করেন 0 এক্সওর 0/1 এক্সওআর 1 ফলাফলটি 0 হয় তবে কিন্তু যদি কোনও বিট আলাদা হয় তবে ফলাফল 1 হয় So সুতরাং যখন আপনি 5 ^ 3 করেছেন তখন আপনি এই বাইনারি ফর্মগুলিতে এই সংখ্যা 5, 6 এ দেখতে পারেন এবং এইভাবে অভিব্যক্তিটি হয়ে যায় (101) XOR (110) যা ফলাফল দেয় (011) যার দশমিক প্রতিনিধিত্ব 3 3


0

পাইথনের মতো অন্যান্য ভাষায় আপনি 10 ** 2 = 100 করতে পারেন, চেষ্টা করে দেখুন।

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