কোনও নম্বর সি # তে ইতিবাচক বা নেতিবাচক কিনা তা আমি কীভাবে পরীক্ষা করব?


206

কোনও নম্বর সি # তে ইতিবাচক বা নেতিবাচক কিনা তা আমি কীভাবে পরীক্ষা করব?

উত্তর:


210
bool positive = number > 0;
bool negative = number < 0;

18
দরিদ্র পুরানো নেতিবাচক শূন্য সম্পর্কে কি ?!
গ্র্যান্ট ক্রফ্টন

3
@ সিমনফিশার অবশ্যই গণিত, কম্পিউটার বিজ্ঞান এবং নিয়মিত বিজ্ঞানের শাখা রয়েছে যা একটি নেতিবাচক এবং ধনাত্মক শূন্য ব্যবহার করে। উদাহরণস্বরূপ রসায়নবিদ এবং পদার্থবিজ্ঞানীরা কখনও কখনও এমন সংখ্যার জন্য -০ ব্যবহার করবেন যা নেতিবাচক এবং শূন্যকে গোল করা হয়েছিল। সংজ্ঞা কেবল একটি প্রসঙ্গে থাকে within গাণিতিক সংজ্ঞাগুলি যখন আপনি শিখিয়েছিলেন যখন আপনি সত্যই সর্বজনীন হন তখন আপনি অন্যরকম গাণিতিক প্রসঙ্গে শেষ হওয়ার ঝুঁকি রাখেন যেখানে আপনি ভুল।
ভোরোনাইপোটাতো

177

অবশ্যই কারও সঠিক উত্তর দেওয়া হয়নি,

num != 0   // num is positive *or* negative!

4
না, ওপি জিজ্ঞাসা করেছে কি is positive or is negativeনাis (positive or negative)
টি.ডিডুয়া

0 এখনও ইতিবাচক
জুনে বাউটিস্তা

@ টি.টোডো আমি বিশ্বাস করি এটি রসিকতা ছিল।
নেদারগ্রানাইট

83

Overkill!

public static class AwesomeExtensions
{
    public static bool IsPositive(this int number)
    {
        return number > 0;
    }

    public static bool IsNegative(this int number)
    {
        return number < 0;
    }

    public static bool IsZero(this int number)
    {
        return number == 0;
    }

    public static bool IsAwesome(this int number)
    {
        return IsNegative(number) && IsPositive(number) && IsZero(number);
    }
}

27
অভ্যন্তরীণভাবে, এটি ক্লাস ইনস্ট্যান্ট করা উচিত যা ISignDeterminatorএকটি ব্যবহার করে প্রয়োগ করে SignDeterminatorFactory
জেসি সি স্লিকার

10
অসম্পূর্ণ: আপনার ইসনএন () পাশাপাশি পরীক্ষা করা উচিত;
স্ল্যাশমেজ

3
@ স্ল্যাশমাইস: অন int?! সি # এর কোন magন্দ্রজালিক ভূমিতে আপনি কাজ করছেন?
জেফ ইয়েটস

2
.NET 4.0 এর জন্য আপনার যুক্ত করা উচিত IsImaginary
রায়ান লন্ডি

2
আপনার কোডটিতে <সাম্যারি> ভাষ্য যুক্ত করা উচিত যাতে এটি আরও নির্ভরযোগ্য, ধারাবাহিক, শালীন, অ্যাক্সেসযোগ্য, স্থিতিশীল, শক্ত, শক্ত, নিরাপদ এবং স্পষ্ট হয়ে ওঠে।
মেমেট ওলসেন

59

Math.Sign পদ্ধতি এক পথ যেতে হয়। এটি নেতিবাচক সংখ্যার জন্য -1, ইতিবাচক সংখ্যার জন্য 1 এবং শূন্যের সমান মানের জন্য 0 (যেমন শূন্যের কোনও চিহ্ন নেই) আসবে। ডাবল এবং একক নির্ভুলতা ভেরিয়েবলগুলি NaN এর সমান হলে একটি ব্যতিক্রম ( অ্যারিমেটিক এক্সেক্সশন ) নিক্ষেপ করবে cause


বাহ এটি জানত না যে এটি বিদ্যমান Na
তন্ময়

@ ট্যানময়: দেখে মনে হচ্ছে এটি সে ক্ষেত্রে ব্যতিক্রম ঘটবে throw
gnovice

1
তবে তারপরে তাকে পরীক্ষা করতে হবে ম্যাথের ফলাফল কিনা ign সাইনটি ইতিবাচক বা নেতিবাচকও! তিনি কি সেই জন্য ম্যাথ.সাইন ব্যবহার করেন? ;)
অ্যান্ড্রুসি 20

3
@ অ্যান্ডিসি: আমি হাস্যরস উপভোগ করেছি, তবে তার রিটার্নের মূল্যের সাথে সমতা তুলনা করা উচিত Math.Sign(যেহেতু এটি স্পষ্টভাবে সম্ভাব্য প্রত্যাবর্তনের মানগুলি সংজ্ঞায়িত করে।)
রব

আমি এই প্রশ্নের নীচে একটি দরকারী উত্তর খুঁজে প্রত্যাশা করিনি, কিন্তু এটি আসলে আমি যা খুঁজছিলাম। ধন্যবাদ।
পল

56
num < 0 // number is negative

12
আমি ধরে নিই যে এটি একটি শিক্ষানবিস, যা আমাদের সাহায্য করার চেষ্টা করা উচিত। একবার আপনি সঠিক উপায়ে শিখলে - ভুল পথে এটি পরীক্ষা করে দেখুন thedailywtf.com/Articles/…
লু ফ্রাঙ্কো

1
প্রথমে আমি প্রধান পৃষ্ঠায় প্রশ্নটি বিশ্বাস করতে পারি না, তারপরে আমি এখানে এসেছি ... :) এবং এই লোকটি একা নয় ... ওহে প্রিয় :)
স্ল্যাশমাজ

25

এটি শিল্পের মান:

int is_negative(float num)
{
  char *p = (char*) malloc(20);
  sprintf(p, "%f", num);
  return p[0] == '-';
}

যদিও এটি সি # নয়
এপিসোডেক্স

5
আমি চেষ্টা করে দেখেছি আমার প্রোগ্রাম শেষ পর্যন্ত স্মৃতি থেকে দূরে চলেছে। আপনার কোডে একটি ফুটো হতে পারে?
থমাস টেম্পেলম্যান

4
@ উইল, এই খুব অস্পষ্ট ফাঁসটি দেখাতে ভালই হয়েছে! যদিও আমি আপনাকে মূল পোস্টারের প্রবর্তনামূলক বাক্যটির অর্থটি পরিবর্তন করার জন্য ভ্রান্ত করেছিলাম। আমি এখনও বিশ্বাস করি এটি শিল্পের মান হিসাবে বলা ঠিক। অতএব, এই উত্তরটির স্পিরিটটি ধরে রাখতে এবং মূল পোস্টারের প্রতি শ্রদ্ধা রেখে, আমি আপনার সম্পাদনাটি উল্টিয়ে দিয়েছি, ঠিক আছে?
টমাস টেম্পেলম্যান

4
@ উইল, আমি কি সত্যিই মূল পোস্ট এবং আমার মন্তব্যগুলি সম্পর্কে স্পষ্ট করে বলার দরকার নেই, যা আপনার না হওয়ার সময় উত্সাহ পেয়েছে? (স্পোলার: এটি কটূক্তি সহকারে করতে হবে, এবং আপনার কাজটি নয়, যার অর্থ আপনি
খারাপটি এখানে উপস্থিত রসিকতাটিকে মেরে ফেলেছেন

2
সেখানে আমরা ফিরে, উল্টানো, পতাকাঙ্কিত এবং ডাউনভোটে যাই। আমি জানতাম না এটি একটি রসিকতা ছিল।
উইল

19

আপনি যুবক এবং আপনার অভিনব চিহ্ন কম চিহ্ন।

আমার দিন ফিরে আমরা ব্যবহার করতে হয়েছিল Math.abs(num) != num //number is negative!


(যদি এটি সুস্পষ্ট না হয় তবে এটি হাস্যরসের উদ্দেশ্য ছিল)
পাওয়ারলর্ড

2
@ এরিক: না, কারণ এটি , (টাইপ ) , ( , ) এর মধ্যে যা যা হয় তার জন্য OverflowExceptionযদি numহয় তবে তা ফেলে দেবে । ফলাফল ফ্লোটিং পয়েন্ট মান, যেখানে তারা হতে পারে এমনকি খারাপ সাল থেকে । MinValueInt16Int32Int64NaNNaN != NaN
পাওয়ারলর্ড


9

নেটিভ প্রোগ্রামারের সংস্করণ। আচরণটি ছোট-এন্ডিয়ান সিস্টেমগুলির জন্য সঠিক।

bool IsPositive(int number)
{
   bool result = false;
   IntPtr memory = IntPtr.Zero;
   try
   {
       memory = Marshal.AllocHGlobal(4);
       if (memory == IntPtr.Zero)
           throw new OutOfMemoryException();

       Marshal.WriteInt32(memory, number);

       result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;
   }
   finally
   {
       if (memory != IntPtr.Zero)
           Marshal.FreeHGlobal(memory);
   }
   return result;
}

কখনও এটি ব্যবহার করবেন না।


9
"এটি কখনও ব্যবহার করবেন না"? তবে এটি এন্টারপ্রাইজ-মানের কোড, এন্টারপ্রাইজ সফ্টওয়্যারের জন্য উপযুক্ত! তোমাকে মিস করছি IsPositiveChecker, IsPositiveCheckerInterface, IsPositiveCheckerFactory, এবং IsPositiveCheckerFactoryInterface, যদিও।
টিম Čas

1
এটি সবেমাত্র আমার হ্যালো ওয়ার্ল্ড কনসোল অ্যাপ্লিকেশনটিতে ব্যবহৃত হয়েছে। 10/10 আবার এটি করবে।
ওয়াহিদ আমিরি

আপনি 'ও' এর '==' এর চেয়ে কম অগ্রাধিকার পেয়েছেন বলে আপনার প্রথম সেটটি অনুপস্থিত রয়েছে, সুতরাং এর result = (Marshal.ReadByte(memory, 3) & 0x80) == 0;পরিবর্তে আপনার উচিত । এছাড়াও, আপনার return result;শেষে কোনও জায়গায় থাকা উচিত যাতে এটি ফলাফলটি ফিরে আসবে।
ড্রাগনরেজ


6

32-বিট স্বাক্ষরিত পূর্ণসংখ্যার জন্য, যেমন সি # এ System.Int32ওরফে int:

bool isNegative = (num & (1 << 31)) != 0;

5
public static bool IsNegative<T>(T value)
   where T : struct, IComparable<T>
{
    return value.CompareTo(default(T)) < 0;
}

5

মান এবং এর নিখুঁত মান সমান হলে আপনাকে কেবল তুলনা করতে হবে:

if (value == Math.abs(value))
    return "Positif"
else return "Negatif"

5
bool isNegative(int n) {
  int i;
  for (i = 0; i <= Int32.MaxValue; i++) {
    if (n == i) 
      return false;
  }
  return true;
}

3
int j = num * -1;

if (j - num  == j)
{
     // Num is equal to zero
}
else if (j < i)
{
      // Num is positive
}
else if (j > i) 
{
     // Num is negative
}

1

এই কোডটি পারফরম্যান্স উন্নত করতে সিমডি নির্দেশাবলীর সুবিধা নেয়।

public static bool IsPositive(int n)
{
  var v = new Vector<int>(n);
  var result = Vector.GreaterThanAll(v, Vector<int>.Zero);
  return result;
}

0

প্রথম প্যারামিটার EAX রেজিস্টারে সংরক্ষণ করা হয় এবং ফলাফলও।

function IsNegative(ANum: Integer): LongBool; assembler;
asm
   and eax, $80000000
end;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.