| এর মধ্যে পার্থক্য কী? এবং || না অপারেটররা?


300

আমি সর্বদা ||সিআর এবং পিএইচপি উভয়ই ওআর এক্সপ্রেশনগুলিতে (দুটি পাইপ) ব্যবহার করেছি । মাঝেমধ্যে আমি একটি একক ব্যবহৃত পাইপ দেখুন: |। এই দুটি ব্যবহারের মধ্যে পার্থক্য কী? একে অপরকে ব্যবহার করার সময় কি কি সাবধানতা অবলম্বন করা হয় বা সেগুলি বিনিময়যোগ্য হয়?

উত্তর:


488

ঠিক যেমন অপারেটর &এবং &&অপারেটর, ডাবল অপারেটর একটি "শর্ট সার্কিট" অপারেটর।

উদাহরণ স্বরূপ:

if(condition1 || condition2 || condition3)

শর্ত 1 সত্য হলে শর্ত 2 এবং 3 পরীক্ষা করা হবে না।

if(condition1 | condition2 | condition3)

এটি 1 এবং ইতিমধ্যে সত্য হলেও শর্তাবলী 2 এবং 3 পরীক্ষা করবে will আপনার শর্তগুলি যেহেতু বেশ ব্যয়বহুল ফাংশন হতে পারে তাই আপনি এগুলি ব্যবহার করে একটি ভাল পারফরম্যান্স উত্সাহ পেতে পারেন।

এখানে একটি বড় ক্যাভিয়েট, নালরফারেন্স বা অনুরূপ সমস্যা রয়েছে। উদাহরণ স্বরূপ:

if(class != null && class.someVar < 20)

ক্লাসটি যদি নাল হয় তবে if-বিবৃতিটি class != nullমিথ্যা হয়ে যাওয়ার পরে থামবে । যদি আপনি কেবল & ব্যবহার করেন তবে এটি চেক করার চেষ্টা করবে class.someVarএবং আপনি একটি দুর্দান্ত পান NullReferenceException। অর-অপারেটরের সাথে এটি কোনও জাল খুব বেশি নাও হতে পারে কারণ আপনি কোনও খারাপ কিছু ট্রিগার করার সম্ভাবনা নেই, তবে এটি মনে রাখা দরকার।

যদিও কোনও একক &বা |অপারেটর ব্যবহার করে না, যদি না আপনি ডিজাইন না করেন যেখানে প্রতিটি শর্ত কার্যকর করার মতো একটি ফাংশন রয়েছে। ডিজাইনের গন্ধ মতো মনে হয় তবে কখনও কখনও (খুব কমই) এটি স্টাফ করার একটি পরিষ্কার উপায়। &অপারেটর "এই 3 ফাংশন চালানোর জন্য, এবং যদি তাদের মধ্যে একজন মিথ্যা ফেরৎ অন্য ব্লক চালানো" না, যখন |"শুধুমাত্র অন্য ব্লক চালানো কেউ রিটার্ন মিথ্যা যদি" না - উপযোগী হতে পারে, কিন্তু বললেন, প্রায়ই এটা একটি নকশা এর গন্ধ।

সেখানে একটি দ্বিতীয় ব্যবহার |এবং &: অপারেটর যদিও Bitwise অপারেশনস


9
হ্যাঁ, আমি কনসোল অ্যাপ তৈরি না করা পর্যন্ত এটি বিশ্বাস করিনি - তবে ভাল প্রভু! তারা কেন নিজেকে ফাঁসানোর জন্য দড়ি দেবে! আমি VB.NET - ওরেলস এবং AndAlso কীওয়ার্ড সম্পর্কে এটি ঘৃণা করি!
জারোদ ডিকসন

24
লোককে ব্যবহার করতে &এবং |শর্তসাপেক্ষ অপারেটর হিসাবে শিক্ষা দেওয়া একটি হ্যাক, এবং তাদের যদি কখনও সি / সি ++ ব্যবহারের প্রয়োজন হয় তবে তাদের সমস্যায় পড়তে হবে: মিথ্যা 1 && 2হলেও সত্য 1 & 2
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

47
এটি কোনও হ্যাক নয়, এটি বিভাগীয় 7.10.3 বিভাগে আনুষ্ঠানিকভাবে সি # এর জন্য নির্দিষ্ট করা হয়েছে: "x বা y এর ফলস সত্য যদি এক্স বা y হয় সত্য হয়। অন্যথায়, ফলাফলটি মিথ্যা।" বিভাগ 7.11 এছাড়াও শর্তসাপেক্ষে লজিকাল অপারেটরগুলি দেখুন: "অপারেশন x || y অপারেশন x | y এর সাথে মিলে যায়, ব্যতীত এক্সটি মিথ্যা হলে কেবল y এর মূল্যায়ন করা হবে" " যা আরও "বৈধতা দেয়" | শর্তসাপেক্ষ অপারেটর হিসাবে। এবং যে লোকেরা সি / সি ++ ব্যবহার করবে তারা যদি কেবল অন্ধভাবে ধরে নেয় যে জিনিসগুলি সমানভাবে কাজ করে তবে তারা সমস্যায় পড়বে। যেমনটি বলেছেন: ব্যবহার | যদি একটি বিবৃতিতে নকশা গন্ধ হয় তবে পুরোপুরি আইনী ক্রিয়াকলাপ।
মাইকেল স্টাম

9
আমি কখনও বলিনি যে এটি আইনী ছিল না, কেবল এটি হ্যাক, যা এটি (আপনি &প্রায়শই যা বোঝায় তার চেয়ে আলাদা অর্থ বোঝাতে ব্যবহার করছেন : বিটওয়াইস-ও)
ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

15
@ ব্লুরাজা-ড্যানিফ্লুঘুফুট ডকুমেন্টেড ফিচারটিকে হ্যাক বলা যখন ডকুমেন্টেশন বলে যে এটি ব্যবহারের উদ্দেশ্যে ছিল, এটি একটি সুইচ স্টেটমেন্ট "আনসিফ হ্যাক" ব্যবহার করার মতো। এটি সরঞ্জাম বাক্সে একটি সরঞ্জাম, খুব কমই ব্যবহৃত বিশেষত একটি সরঞ্জাম সম্ভবত, তবে একটি সরঞ্জাম কম নয়।
জেন্ট করুন

80

|| লজিকাল ওআর অপারেটর। দেখে মনে হচ্ছে আপনি এটি মূলত জানেন। এটি শর্তাধীন বিবৃতিতে যেমন যেমন, কখন, ইত্যাদিতে ব্যবহৃত হয় used

condition1 || condition2

যদি কন্ডিশন 1 বা শর্ত 2 সত্য হয় তবে মূল্যায়ণগুলি সত্য হয়।

| বিটওয়াইস বা অপারেটর। এটি দুটি সংখ্যায় পরিচালনা করতে ব্যবহৃত হয়। আপনি প্রতিটি সংখ্যার প্রতিটি বিট স্বতন্ত্রভাবে দেখুন এবং, যদি বিটগুলির মধ্যে একটিও সংখ্যার কমপক্ষে একটিতে 1 হয়, তবে ফলাফল বিটটি 1 টিও হবে। এখানে কিছু উদাহরণ আছে:

A = 01010101
B = 10101010
A | B = 11111111

A = 00000001
B = 00010000
A | B = 00010001

A = 10001011
B = 00101100

A | B = 10101111

আশা করি তা বোধগম্য হয়।

সুতরাং শেষ দুটি প্রশ্নের উত্তর দেওয়ার জন্য, আমি এটি বলব না যে "দুটি অপারেটরের মধ্যে পার্থক্যটি জানুন" ছাড়াও কোনও গুপ্তচর রয়েছে। তারা বিনিময়যোগ্য নয় কারণ তারা দুটি সম্পূর্ণ ভিন্ন জিনিস করে।


এটি আমাকে বুঝতে সাহায্য করেছিল যে কেউ মোংডব সি # ড্রাইভারের মধ্যে ফিল্টারগুলি একীভূত করতে কীভাবে বিটওয়াইস বা অপারেটর ব্যবহার করছেন। gist.github.com/a3dho3yn/…
ডনি ভি।

30

একটি হ'ল "বিটওয়াইস বা"।

10011 বি | 01000 বি => 11011 বি

অন্যটি একটি যুক্তিযুক্ত বা।

সত্য বা মিথ্যা => সত্য


2
|boolশর্ট সার্কিট না করে ধরণের ক্ষেত্রেও ব্যবহার করা যেতে পারে ।
12

14

ভাল প্রশ্ন. এই দুটি অপারেটর পিএইচপি এবং সি # তে একই কাজ করে।

|কিছুটা দিকের OR। এটি তাদের বিট দ্বারা দুটি মান তুলনা করবে। যেমন 1101 | 0010 = 1111. বিট বিকল্পগুলি ব্যবহার করার সময় এটি অত্যন্ত কার্যকর। উদাহরণস্বরূপ পঠন = 01 (0X01) লিখুন = 10 (0X02) পঠন-লিখন = 11 (0X03)। একটি দরকারী উদাহরণ ফাইল খোলার হবে। একটি সাধারণ উদাহরণ হবে:

File.Open(FileAccess.Read | FileAccess.Write);  //Gives read/write access to the file

||একটি যৌক্তিক OR। এইভাবেই বেশিরভাগ লোকেরা ওআর সম্পর্কে চিন্তা করে এবং তাদের সত্যের ভিত্তিতে দুটি মানকে তুলনা করে। যেমন আমি দোকানে যাচ্ছি বা আমি মলে যাব। কোডে এটি প্রায়শই ব্যবহৃত হয়। উদাহরণ স্বরূপ:

if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer

পিএইচপি রিসোর্স: http://us3.php.net/language.operators.bitwise

সি # রিসোর্স: http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx


4
এফডব্লিউআইডাব্লু, প্রযুক্তিগতভাবে, সি # |তে একটি এফডব্লিউআইডাব্লু লজিকাল বা যখন বুলিয়ানগুলিতে প্রয়োগ হয় । আপনার লিঙ্কযুক্ত রেফারেন্স হিসাবে। অনুশীলনে, শেষ ফলাফলটি হ'ল বিটওয়াস অপারেটর হিসাবে একই রকম, কারণ এর বিটওয়াইস মানগুলি trueএবং falseএমন যে বিটওয়াইস বা তাদের মানগুলির মধ্যে একটি লজিকাল বা ঠিক যেমন একই ফলাফল ফলাফল করে। তা (int)(bool1 | bool2)== ((int)bool1) | ((int)bool2)
টুলমেকারস্টেভ

4

জাভাতে সাধারণ উদাহরণ

public class Driver {

  static int x;
  static int y;

public static void main(String[] args) 
throws Exception {

System.out.println("using double pipe");
    if(setX() || setY())
        {System.out.println("x = "+x);
        System.out.println("y = "+y);
        }



System.out.println("using single pipe");
if(setX() | setY())
    {System.out.println("x = "+x);
    System.out.println("y = "+y);
    }

}

 static boolean setX(){
      x=5;
     return true;
  }
 static boolean setY(){
      y=5;
      return true;
  }
}

আউটপুট:

using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5

2
এমন প্রশ্নের জন্য কেন আপনি জাভা উদাহরণ দেবেন যা এমনকি জাভাও উল্লেখ করে না?
12

4

এবং - (শর্ত ১ এবং শর্ত ২): প্রথমটি মিথ্যা হলেও দুটি ক্ষেত্রেই পরীক্ষা করে

&& - (শর্ত 1 && শর্ত 2): কেসটি মিথ্যা হলে দ্বিতীয় কেসটি পরীক্ষা করতে বিরক্ত করবেন না

&& - অপারেটর আপনার কোডটি দ্রুত, পেশাদারভাবে চালিত করবে এবং খুব কমই ব্যবহৃত হয়

| - (শর্ত ১ | শর্ত ২): কেস 1 সত্য হলেও উভয় কেস চেক করে

|| - (শর্ত ১ || শর্ত ২): প্রথমটি যদি সত্য হয় তবে দ্বিতীয় কেসটি পরীক্ষা করতে বিরক্ত করবেন না

|| - অপারেটর আপনার কোডটি দ্রুত, পেশাদারভাবে চালিত করবে | খুব কমই ব্যবহৃত হয়


2
rarely used? সব আপনি কী চান বা করা দরকার তার উপর নির্ভর করে।
ইমবার্সা

1
গ্রেট! সংক্ষিপ্ত এবং মিষ্টি, আমি "| খুব কমই ব্যবহৃত হয়" এবং "খুব কম ব্যবহৃত হয়" অপসারণ করব কারণ ইমাবোর্সা যেমন বলেছিলেন, এটি আপনার যা করতে বা করা দরকার তার উপর নির্ভর করে।
আইয়ানিক

0

একক পাইপ, |, বিটওয়াইস অপারেটরগুলির মধ্যে একটি।

উইকিপিডিয়া থেকে:

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


0

তাদের গাণিতিক সংজ্ঞা অনুসারে, ও এবং এবং বাইনারি অপারেটর; তারা এলএইচএস এবং আরএইচএসের শর্তগুলি নির্বিশেষে যাচাই করে | এবং &.

|| এবং && অ্যান্ড ও অপারেটরগুলির বৈশিষ্ট্যগুলি এলএইচএস শর্ত পূরণ না হলে তাদের বন্ধ করে তাদের পরিবর্তন করে।


-1

| | অপারেটর তার দুটি অপারেশনগুলির থেকে কিছুটা বা কিছুটা পারফরম্যান্স সম্পাদন করে (এর অর্থ মিথ্যা প্রত্যাবর্তনের জন্য উভয় পক্ষকে অবশ্যই ভুয়া মূল্যায়ন করতে হবে) || অপারেটর প্রয়োজন হলে কেবল দ্বিতীয় অপারেটরকেই মূল্যায়ন করবে।

http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx

http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx


আপনি যদি প্রকৃতপক্ষে এই নিবন্ধগুলি পড়েন তবে আপনি দেখতে পাবেন যে তারা বিটওয়াইজ অপারেটরগুলি উল্লেখ করছে
জনক

বিটওয়াইজ মানে এই নয়।
juharr

-1

সিজ পাইপ "|" এটি "বিটওয়াইজ" বা এটি তখনই ব্যবহার করা উচিত যখন আপনি জানেন যে আপনি কী করছেন। ডাবল পাইপ "||" এটি একটি যৌক্তিক বা, এবং "x == 0 || x == 1" এর মতো যৌক্তিক বিবৃতিতে ব্যবহার করা যেতে পারে।

এখানে বিটওয়াইস বা কী করে তার একটি উদাহরণ: যদি a = 0101 এবং b = 0011 হয় তবে a | b = 0111। যদি আপনি এমন কোনও যুক্তি ব্যবস্থা নিয়ে কাজ করছেন যা কোনও শূন্যকে সত্য হিসাবে বিবেচনা করে, তবে বিটওয়াইস বা যৌক্তিক বা একইভাবে কাজ করবে, তবে এটি প্রতিদ্বন্দ্বী (বিটওয়াইজ এবং, "&") হবে না। এছাড়াও বিটওয়াইস বা শর্ট সার্কিট মূল্যায়ন করে না।


'|' boolশর্ট সার্কিট না করেও প্রকারে ব্যবহার করা যেতে পারে ।
juharr

-2

একটি একক পাইপ (|) বিটওয়াইস বা অপারেটর

দুটি পাইপ (||) লজিকাল ওআর অপারেটর।

এগুলি বিনিময়যোগ্য নয়।


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