(X ^ 0x1) এর অর্থ কী? = 0 এর অর্থ কী?


183

আমি নিম্নলিখিত কোড স্নিপেট জুড়ে এসেছি

if( 0 != ( x ^ 0x1 ) )
     encode( x, m );

কী x ^ 0x1মানে? এটি কি কিছু স্ট্যান্ডার্ড কৌশল?


97
কোড অবলম্বন বেশ স্ট্যান্ডার্ড।
raina77ow

47
এটি একটি "সাধারণ" সমীকরণের মতো একই পদ্ধতির সাথে সমাধান করা যেতে পারে: 0 != (x ^ 1)both উভয় পক্ষকে 1 → (0 ^ 1) != (x ^ 1 ^ 1)→ সরল করুন →1 != x
স্কোর_উন্ডারে

4
কীভাবে if (1 != x)লেখা শক্ত তা আমি দেখছি না ।
অ্যাড্রিয়ানো ভারোলি পিয়াজা

12
বিভিন্ন মন্তব্য, প্রথম @Spook দ্বারা স্পষ্ট নির্দেশ অনুযায়ী typeএর xদেওয়া হয় - অত: পর আমরা জানি না এই সি একটি পূর্ণসংখ্যা ++, বাঁধা সমস্যা। অবশ্যই, যদি এটি সি হয় বা xএকটি পূর্ণসংখ্যা হয় তবে উত্তরটি সহজ তবে এটি প্রদত্ত নয় এবং অতিরিক্ত লোড হওয়ার সম্ভাবনা operator ^বিদ্যমান।
chux - মনিকা

11
আমি দেখতে পাচ্ছি না কীভাবে এটি এতগুলি উপভোগ করে ...
লাইক

উত্তর:


277

এক্সওআর অপারেশন ( x ^ 0x1) বিট 0 বিপরীত করে। তাই এক্সপ্রেশনটির কার্যকর অর্থ: x এর বিট 0 যদি 0 হয় বা অন্য কোনও বিট 1 হয় তবে এক্সপ্রেশনটি সত্য।

বিপরীতে এক্স == 1 হলে এক্সপ্রেশনটি মিথ্যা।

সুতরাং পরীক্ষা একই হিসাবে:

if (x != 1)

এবং অতএব (তর্কযুক্ত) অযথা নিরবচ্ছিন্ন হয়।


39
আরে, আপনি প্রসঙ্গটি জানেন না। যদি এক্স কোনও ধরণের বিট পতাকা হয় তবে এটি IMO আসলে লেখার চেয়ে আরও স্পষ্ট যে এটি এখনকার মতো! = অপারেটর ব্যবহারের চেয়ে বেশি।
ভূত

40
@ স্পুক: এটি কেবলমাত্র একক বিট পতাকা পরীক্ষা করছে না - এটি এক্স এর সম্পূর্ণ প্রস্থ পরীক্ষা করে। আপনি যদি কেবলমাত্র একটি বিট পরীক্ষা করতে চান তবে আরও পরিষ্কার আইডিয়ম রয়েছে যেমন একটি বিটওয়াইস এবং ব্যবহার করুন।
পল আর

115
অহেতুক অবসন্ন? আপনি কি জানেন না যে কোডটি অবলম্বন করা আমাদের কাজ। যদি আমরা এমন সহজ কোড লিখি যে কেউ বুঝতে পারে, তবে কেন, আমাদের অবস্থানগুলিতে বিশ্বে ধর্মীয় পবিত্রতা কোথায় যাবে? আমরা হঠাৎ করে অন্য সবার মতো সাধারণ কর্মী হয়ে উঠব। অস্পষ্টতা সহজাতভাবে প্রয়োজনীয়।
থম

31
আসলে স্পুক ঠিক আছে। পরীক্ষা (x! = 1) সমতুল্য নয়। কোডটি সি ++ (এবং সি ++ এ, an কোনও অপারেটর হতে পারে যা কিছু করতে পারে)। সুতরাং আপনি প্রসঙ্গটি জানেন না, @ স্পুক ঠিক আছে।
xryl669

82
@ দ্য থম уєт уσυ ωяιтє ιи ¢ ℓєαя тєχт
বোবোবোবো

78
  • ^বিটওয়াইজ এক্সওআর অপারেশন
  • 0x1হয় 1হেক্স স্বরলিপি
  • x ^ 0x1এর শেষ বিটটি উল্টে দেবে x(এটি যদি আপনার কাছে পরিষ্কার না হয় তবে উপরের লিঙ্কের XOR সত্য সারণীটি দেখুন)।

সুতরাং, শর্তটি (0 != ( x ^ 0x1 ))সত্য হবে যদি x1 এর চেয়ে বড় হয় বা শেষ বিট x0 হয় তবে যা শর্তটি মিথ্যা হবে তার মান হিসাবে কেবল x == 1 ছাড়বে। সুতরাং এটি সমতুল্য

if (x != 1)

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


7
এটা না x==0; 4 ^ 0x1সত্য, তবে 4==0এটি অবশ্যই মিথ্যা।
ফ্রেড ফু

4
"শর্তটি সমান বলে মনে হচ্ছে if (x == 0)", এটি কি সমান নয় x != 1?
অ্যান্ড্রু-ডুফ্রেসনে

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

4
@ সুপের্যাট / এর operator^জন্য নেই । floatdouble
ফ্লফি

1
@ সুপের্যাট: যখন ভাসমান-পয়েন্ট থেকে পূর্ণসংখ্যায় রূপান্তরটির জন্য বলা হয়, রূপান্তর অন্তর্ভুক্ত হয় (castালাই সিনট্যাক্সের প্রয়োজন হয় না)। কিন্তু বিটওয়াইড অপারেটর দ্বারা কোনও রূপান্তর ট্রিগার হয় না, তারা কেবল ভাসমান-পয়েন্টের ধরণের জন্য ব্যর্থ হয়।
বেন ভয়েগট

49

এটি বড় আকারের ব্যাখ্যা হিসাবে মনে হতে পারে তবে কেউ যদি ধীরে ধীরে এর মধ্য দিয়ে যেতে চায় তবে এটি নীচে রয়েছে:

^সি, সি ++ এবং সি # তে কিছুটা এক্সওআর অপারেটর।

একটি বিটওয়াইজ এক্সওর সমান দৈর্ঘ্যের দুটি বিট নিদর্শন নেয় এবং প্রতিটি বিযুক্ত জোড় সম্পর্কিত লজিকাল এক্সক্লুসিভ বা অপারেশন সম্পাদন করে।

এক্সক্লুসিভ অর একটি যৌক্তিক অপারেশন যা যখনই উভয় ইনপুট পৃথক হয় (এক সত্য, অন্যটি মিথ্যা হয়) true

সত্য টেবিল এর একটি XOR খ :

a           b        a xor b
----------------------------
1           1           0
1           0           1
0           1           1
0           0           0

সুতরাং আসুন 0 == ( x ^ 0x1 )বাইনারি স্তরে অভিব্যক্তিটি বর্ণনা করি :

             what? xxxxxxxx (8 bits)
               xor 00000001 (hex 0x1 or 0x01, decimal 1)    
             gives 00000000
---------------------------
the only answer is 00000001

তাই:

   0 == ( x ^ 0x1 )    =>    x == 1
   0 != ( x ^ 0x1 )    =>    x != 1

34

এটি একচেটিয়া OR (XOR) অপারেটর। এটি কীভাবে কাজ করে তা বুঝতে আপনি এই সাধারণ কোডটি চালাতে পারেন

    std::cout << "0x0 ^ 0x0 = " << ( 0x0 ^ 0x0 ) << std::endl;
    std::cout << "0x0 ^ 0x1 = " << ( 0x0 ^ 0x1 ) << std::endl;
    std::cout << "0x1 ^ 0x0 = " << ( 0x1 ^ 0x0 ) << std::endl;
    std::cout << "0x1 ^ 0x1 = " << ( 0x1 ^ 0x1 ) << std::endl;

আউটপুট হবে

0x0 ^ 0x0 = 0
0x0 ^ 0x1 = 1
0x1 ^ 0x0 = 1
0x1 ^ 0x1 = 0

তাই এই অভিব্যক্তি

0 != ( x ^ 0x1 )

x! = 0x1 হলেই সমান সত্য হবে।

এটি এক্স নিজেই পরিবর্তন করে না। এটি কেবলমাত্র x 0 বা 1 এর সমান কিনা তা পরীক্ষা করে this

if ( x != 0x1 )

19

এটা তোলে চেক যে xআসলে হয় না 0x1... xoring xসঙ্গে 0x10 পরিণাম ডেকে আনবে শুধুমাত্র যদি xহয় 0x1... এই একটি পুরানো কৌতুক বেশিরভাগই সমাবেশ ভাষা ব্যবহার করে তা হল


এটি কি এর চেয়ে দ্রুত != 1?
ফিডলিং বিট

2
প্রাচীন কালে ম্যানুয়াল অ্যাসেম্বলি অপ্টিমাইজেশানগুলি করার সময় (x86) যদি আমি সঠিকভাবে মনে করি তবে xorপদ্ধতির কম মেশিন কোড রয়েছে এবং তার সাথে সম্পর্কিত এসাইনমেন্টের চেয়ে দ্রুত সম্পাদন করা হয়েছিল 0... তবে এই প্রশ্নটিতে একটি xorএবং একটি তুলনা রয়েছে, তাই আমি ভাবতে পারি যে !=হতে পারে দ্রুত। আমি তবে এতটা নিশ্চিত নই যে, কিছু সংকলক উত্পাদিত সমাবেশ দেখতে হবে see
ফেরেঙ্ক ডেক

10
@ বিটফিডলিংকোড মুনকি: না। যদি XOR কিছু নেটিভ লেভেল সাম্যতা পরীক্ষার চেয়ে দ্রুত হয় তবে আপনার সংকলকটি এক্সওআরএসকে সাম্যতার জন্য পরীক্ষার জন্য নির্গত করবে। অতএব, এক্সএআরএস কখনই সংযোজকগুলির অনুকূলকরণের ক্ষেত্রে সাম্যতার পরীক্ষার চেয়ে দ্রুত হয় না। দ্রুত কোড লেখার 101 রুল হ'ল "চেষ্টা করুন এবং সংকলকটিকে সাহায্য করবেন না You আপনি কেবল অপঠনযোগ্য কোডটি তৈরি করবেন যা অনুশীলনে ধীর"।
ম্যাট

@ ফ্রিজোন আইআইআরসি, এক্সওআর কৌশলগুলি রেজিস্টারগুলি সংরক্ষণের সাথে আরও কিছু করার ছিল, একটি রেজিস্টার লোড বি / সি সংরক্ষণ করে কিছু ক্ষেত্রে সরাসরি ওপিতে এনকোড করা যেতে পারে এবং স্ট্যাটাস ফ্ল্যাগের সাথে কিছু সূক্ষ্ম পার্থক্য ছিল (তবে আমার বেশিরভাগ সমাবেশ চালু ছিল) 68 কে এবং ডিএসপি)।
এমপিডোনাদিও

1
@ এমপিডি: সাধারণত এটি একটি রেজিস্টার সাফ করার জন্য করা হয় (কমপক্ষে 386+ তে)। xor eax, eax দুটি বাইটে eax শূন্যে সেট করে তবে মুভ ইক্স, 0 তিন বা ছয় বাইট নেয় (এনকোডিংয়ের উপর নির্ভর করে), এবং জোর ফর্মের চেয়ে ডিকোড করতে কিছুটা বেশি সময় নেয় ।
ম্যাট

18

^অপারেটর XOR, bitwise হয়। এবং 0x1নম্বরটি 1হেক্সাডেসিমাল ধ্রুবক হিসাবে লেখা।

সুতরাং, x ^ 0x1একটি নতুন মান যা একই হিসাবে মূল্যায়ন x, কিন্তু কমপক্ষে উল্লেখযোগ্য বিট উল্টানো সঙ্গে।

কোডটি 1 টির সাথে x টি তুলনা করা ছাড়া আর কিছুই করে না, একটি খুব কনভোলিউটেড এবং অস্পষ্ট ফ্যাশনে।


11

জোর (একচেটিয়া বা) অপারেটরটি সাধারণত এক বা একাধিক বিট উল্টাতে ব্যবহৃত হয়। অপারেশনটি জিজ্ঞাসা করতে হবে যে সঠিকভাবে বিটগুলির মধ্যে একটি হ'ল, এটি নিম্নলিখিত সত্যের ছককে নিয়ে যায় (এ এবং বি ইনপুট, ওয়াই আউটপুট):

A    B    Y
0    0    0
0    1    1
1    0    1
1    1    0

এখন এই কোডটির উদ্দেশ্যটি দেখে মনে হচ্ছে চূড়ান্তভাবে শেষ বিটটি 1 হয়, এবং অন্যান্য 0 হয়, এটি সমান if ( x != 1 )। এই অস্পষ্ট পদ্ধতির কারণ হতে পারে যে পূর্বের বিট ম্যানিপুলেশন কৌশলগুলি ব্যবহার করা হয়েছে এবং সম্ভবত প্রোগ্রামের অন্যান্য জায়গাগুলি ব্যবহার করা হয়েছে।


8

^, bitwise হয় xor operatorমধ্যে c। আপনার ক্ষেত্রে x এর 1 টি xor'ed হয় উদাহরণস্বরূপ xমান 10 রয়েছে, 10d ^ 1d ===> 1010b ^ 0001b = 1011b, 1011b == 11dসুতরাং শর্তটি সত্য হয়ে ওঠে।


আপনার উত্তরে টাইপ করুন। 10 != 1010
ফিডলিং বিট

@ বিটফিডলিংকোড মুনকি: আপনার মন্তব্যে টাইপ করুন:10 (decimal) == 1010 (binary)
পল আর

6
@ পলআর আপনি কীভাবে কীভাবে জানতে পারবেন যে দশমিক কী এবং বাইনারি কী তা যদি আপনি bসেখানে একটি বা কিছু না রাখেন ?
ফিডলিং বিট

0b1010 কি জিনিসগুলি করার জন্য পাইথোনিক উপায় হবে না?
ট্যানকোরস্যামশ

8

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


7

অপারেটর হ'ল বিটওয়াইজ-এক্সওর (দেখুন &, |)। কিছুটা জোড়ার জন্য ফলাফল,

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

সুতরাং প্রকাশ,

( x ^ 0x1 )

এক্স-এর 0 তম বিটকে ইনভার্ট / ফ্লপ করে (অন্যান্য বিট অপরিবর্তিত রেখে)।

এক্স এর 0x0 এবং 0x1 এর সাথে মান থাকতে পারে কিনা তা বিবেচনা করুন? X যখন একক বিট ক্ষেত্র হয় তবে এর কেবলমাত্র 0x0 এবং 0x1 মান থাকতে পারে, তবে যখন x একটি int (চর / সংক্ষিপ্ত / দীর্ঘ / ইত্যাদি) হয়, বিট 0 এর সাথে বিটগুলি এক্সপ্রেশনটির ফলাফলকে প্রভাবিত করতে পারে।

প্রদত্ত হিসাবে প্রকাশটি বিট0 এর পাশে বিটগুলি ফলাফলকে প্রভাবিত করতে দেয়,

if ( 0 != ( x ^ 0x1 ) )

যার এই (সরল) মত প্রকাশের সমান সত্যতা রয়েছে,

if ( x ^ 0x1 )

মনে রাখবেন যে এই অভিব্যক্তিটি কেবল বিট 0 পরীক্ষা করবে,

if( 0x1 & ( x ^ 0x1 ) )

সুতরাং হিসাবে প্রকাশিত এক্সপ্রেশন সত্যিই দুটি এক্সপ্রেশন চেক একত্রিত হয়,

if( ( x & ~0x1 )  //look at all bits besides bit0
||  ( x ^ 0x1 ) ) //combine with the xor expression for bit0

লেখক কি কেবল বিট0 যাচাই করতে চেয়েছিলেন এবং এই অভিব্যক্তিটি ব্যবহার করতে চেয়েছিলেন,

if( 0x1 & ( x ^ 0x1 ) )

অথবা লেখক কি বিট 1-বিটএন এবং বিট 0 এর জোরের মানগুলি বয়ে আনতে চান?


7

আমি একটি নতুন উত্তর যুক্ত করছি কারণ প্রত্যক্ষভাবে কীভাবে উত্তরটি স্বজ্ঞাতভাবে পাওয়া যায় তা কেউ ব্যাখ্যা করেনি।

বিপরীত +হয় -
বিপরীত ^হয় ^

আপনি কীভাবে সমাধান 0 != x - 1করবেন x? আপনি + 1উভয় পক্ষের: 0 + 1 != x - 1 + 11 != x
আপনি কীভাবে সমাধান 0 != x ^ 1করবেন x? আপনি ^ 1উভয় পক্ষের: 0 ^ 1 != x ^ 1 ^ 11 != x


6

আমি অনুমান করতে পারি যে এতে অন্যান্য বিট বা বিট-ফিল্ড মান রয়েছে xএবং এটি কেবল নিম্ন-আদেশ বিট সেট আছে তা পরীক্ষা করার উদ্দেশ্যে। প্রসঙ্গে, আমি অনুমান করতে পারি যে এটি ডিফল্ট, এবং সুতরাং এগুলি এবং কিছু সম্পর্কিত m(সম্ভবত এনকোড করা আরও ব্যয়বহুল) এর এনকোডিং এড়ানো যেতে পারে, কারণ সেগুলি উভয়ই কনস্ট্রাক্টর বা অনুরূপ হিসাবে আরম্ভ করা উচিত default

কোনওভাবেই ডিকোডারটি অবশ্যই এই মানগুলি অনুপস্থিত তা নির্ধারণ করতে সক্ষম হতে হবে। এগুলি যদি কোনও কাঠামোর শেষে থাকে তবে এটি lengthসর্বদা উপস্থিত কোনও মানের মাধ্যমে যোগাযোগ করা যেতে পারে ।


4

XOR সি # ফ্ল্যাগ এনামে দরকারী। এনাম মান থেকে একক পতাকা মুছে ফেলার জন্য জোর অপারেটরটি ব্যবহার করা প্রয়োজন ( এখানে উল্লেখ করুন )

উদাহরণ:

[Flags]
enum FlagTest { None 0x0, Test1 0x1, Test2 0x2, Test3 0x4}

FlagTest test = FlagTest.Test2 | FlagTest.Test3;
Console.WriteLine(test); //Out: FlagTest.Test2 | FlagTest.Test3
test = test ^ FlagTest.Test2;
Console.WriteLine(test); //Out: FlagTest.Test3

তবে প্রশ্নটি সি ++ সম্পর্কিত, সি # নয়
TheDmi

@ থিডিমি: তবে বিট ম্যানিপুলেশন এবং বিটমাস্ক সম্পর্কেও। সি # তে ফ্ল্যাগ এনাম অবশ্যই বিটমাস্ক সম্পর্কে।
ইগ্রেক

এছাড়াও এটি সি ++ তেও কার্যকর হতে পারে। দেখুন: স্ট্যাক 1 এবং স্ট্যাক 2
ইগ্রেক।

এই উত্তরটির বিটওয়াইস এক্সওআর অপারেটর সম্পর্কে কিছু আলোচনা বাদে মূল প্রশ্নের সাথে কিছু করার নেই বলে মনে হচ্ছে?
পল আর

4

অনেক ভাল উত্তর আছে তবে আমি এটিকে সহজ উপায়ে ভাবতে পছন্দ করি।

if ( 0 != ( x ^ 0x1 ) );

সবার আগে। যদি তর্ক শূন্য হয় তবে একটি বিবৃতিটি কেবল মিথ্যা। এর অর্থ শূন্যের সমান নয় তুলনা অর্থহীন।

if ( a != 0 );
// Same as
if ( a );

যাতে আমাদের সাথে ছেড়ে যায়:

if ( x ^ 0x1 );

একটি সহ একটি এক্সওআর। একটি এক্সওআর যা করে তা হ'ল বিটগুলি আলাদাভাবে সনাক্ত করা detect সুতরাং, সমস্ত বিট যদি একই হয় তবে এটি 0 ফিরে আসবে Since যেহেতু 0 টি মিথ্যা, কেবলমাত্র বিটগুলি সমস্তই যদি একই রকম হয় তবে তা ফিরে আসবে। সুতরাং এটি মিথ্যা হবে যদি আর্গুমেন্টগুলি একই হয়, সত্য যদি সেগুলি পৃথক হয় ... ঠিক যেমন অপারেটরের সমান নয়

if ( x != 0x1 );

যদি সত্যই, উভয়ের মধ্যে একমাত্র পার্থক্যটি !=0 বা 1 ^ফিরে আসবে , যখন যে কোনও সংখ্যা ফেরত দেবে, তবে ফলাফলের সত্যতা সর্বদা একই থাকবে be এটি সম্পর্কে ভাবার একটি সহজ উপায়।

(b != c) === !!(b ^ c) // for all b and c

চূড়ান্ত "সরলীকরণ" 0x1দশমিক রূপান্তরিত হয় যা 1। সুতরাং আপনার বিবৃতি সমান:

if ( x != 1 )

1

হ'ল বিটওয়াইজ এক্সওআর অপারেটর

যদি এক্স = 1

          00000001   (x)       (decimal 1)
          00000001   (0x1)     (decimal 1)
XOR       00000000   (0x0)     (decimal 0)

এখানে 0 == (x ^ 0x1)

যদি x = 0 হয়

          00000000   (x)       (decimal 0)
          00000001   (0x1)     (decimal 1)
XOR       00000001   (0x1)     (decimal 0)

এখানে 0! = (x ^ 0x1)

একটি জোর বি এর সত্য টেবিল:

a           b        a xor b
----------------------------
1           1           0
1           0           1
0           1           1
0           0           0

কোডটির সহজ অর্থ


6
এটি এখনও অন্য সদৃশ উত্তর পোস্ট করা প্রয়োজন?
রহস্যময়

2
আপনি অন্য উত্তর বলতে পারেন তবে সদৃশ নয়। দুঃখিত যদি আপনি মনে করেন
আকবর আলি

1

এখানে যে স্ট্যান্ডার্ড টেকনিকটি ব্যবহার করা হতে পারে তা হ'ল একটি মূর্তিটির পুনরাবৃত্তি যা স্পষ্টতার জন্য আশেপাশের প্রেক্ষাপটে উপস্থিত হয়, বরং এটি গাণিতিকভাবে সরল তবে প্রাসঙ্গিক অর্থহীন id

পার্শ্ববর্তী কোডটি ঘন ঘন রেফারেন্স তৈরি করতে পারে (x ^ 1), বা পরীক্ষাটি জিজ্ঞাসা করতে পারে "বিট 0 যদি অন্যভাবে ছিল, এই বিট-মাস্কটি কি ফাঁকা থাকবে?"

শর্তটি কিছু পরিবর্তন করার কারণ হিসাবে দেওয়া হয়েছে encode(), এটি হতে পারে যে প্রসঙ্গে বিট 0 এর ডিফল্ট অবস্থাটি অন্য কারণগুলির দ্বারা উল্টানো হয়েছে এবং বিটগুলির কোনও ডিফল্ট থেকে বিচ্যুত হলে আমাদের কেবলমাত্র অতিরিক্ত তথ্য এনকোডের প্রয়োজন (সাধারণত সমস্ত শূন্য) we )।

আপনি যদি অভিব্যক্তিটিকে প্রসঙ্গের বাইরে নিয়ে যান এবং জিজ্ঞাসা করে যে এটি কী করে তবে আপনি অন্তর্নিহিত উদ্দেশ্যটিকে উপেক্ষা করবেন। আপনি সংকলক থেকে ঠিক ঠিক পাশাপাশি সমাবেশ আউটপুট তাকান এবং দেখতে পারেন যে এটি সহজভাবে 1 এর সাথে সরাসরি সমতার তুলনা করে।


0

আমি এখন পর্যন্ত উত্তরগুলি দেখতে পাই এর জন্য হ্যান্ডল করার জন্য একটি সাধারণ নিয়ম মিস করছি XOR। কী ^এবং 0xকী (এবং if, এবং !=) এর বিশদে না গিয়ে , 0 != (x^1)এই সত্যটি ব্যবহার করে এক্সপ্রেশনটি নীচে নীচে কাজ করা যেতে পারে (a^a)==0:

0 != (x^1) <=> [xor left and right side by 1]
(0^1) != (x^1^1) <=>
1 != x
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.