ধনাত্মক সংখ্যাটিকে সি # তে নেতিবাচক রূপান্তর করুন


142

আপনি নেতিবাচক সংখ্যাটিকে ইতিবাচক হিসাবে রূপান্তর করতে পারেন:

int myInt = System.Math.Abs(-5);

ধনাত্মক সংখ্যাটিকে negativeণাত্মক করার জন্য কি কোনও সমতুল্য পদ্ধতি আছে?



3
280Z28: এটি myInt = -1 এর সমান।
পুনরাবৃত্তি

1
have to myInt | = int.MinValue;
চার্লস ব্রেটানা

@ 280Z28: এটি কেবল বিজোড় সংখ্যার জন্যই কাজ করে, অন্যথায় এটি সংখ্যাটিকে negativeণাত্মক করা এবং তারপরে ১ টি বিয়োগ করার সমান
সিসিলের একটি নাম আছে

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

উত্তর:


452

কেমন

myInt = myInt * -1


55
এই সমাধানটি দুর্দান্ত কারণ এটি নেতিবাচককে ধনাত্মক রূপান্তর করতে পারে! জিনিয়াস!
উইল এডিন্স

19
আমি এই ছাপের মধ্যে ছিলাম যে আপনি এটিকে উপেক্ষা করার জন্য কেবল কোনও "-" সামনে আটকে রাখতে পারেন ... - এটি আমার মাইন্ডের মানটির নেতিবাচক হবে ...
ডেটাডিংক

12
কি myInt = - Myint?
কোকবিরা

9
বা আরও খাটো myInt *= - 1?
নওফাল

এফওয়াইআই যদি আপনি কোকবীরের পদ্ধতিটি একটি শর্ট, myShort = (short) -myShortকাস্টের সাহায্যে চেষ্টা করেন তবে শর্টটি যখন উপেক্ষিত হয় তখন ইন্টারটি হয়ে যায়।
অ্যারোনএলএস

236
int myNegInt = System.Math.Abs(myNumber) * (-1);

29
এটি মনে রাখার জন্য +1 এটি ইতিমধ্যে যদি নেতিবাচক হয় তবে আপনার বিপরীত প্রভাব পড়বে। আপনার উত্তরটি কেবলমাত্র একমাত্র যা MyNumber ইতিবাচক বা নেতিবাচক কিনা তা বিবেচনা না করে সর্বদা একটি নেতিবাচক নম্বর দেয়।
ডেভিড

এই উত্তরের জন্য কেবল 26 ভোট? এমন কি ব্যবহারকারী যারা মনে করেন যে এটি কাজ করবে না?
মুসিজিনিসিস

6
৩০ ভোট? ইতিমধ্যে প্রশ্নটি এত সহজ। এবং এই অতি-জটিল উত্তরটি (-সিস্টেম। ম্যাথ.অ্যাবস (মাই নাম্বার )ও করবে) 30 টি ভোট পেয়ে ????
মিমি মিমি মিমি

4
@ স্টেস্টেভেনস প্রত্যেকে সম্মিলিতভাবে এই উত্তরটি নির্দেশ করার চেষ্টা করছেন এটি গৃহীত উত্তরটির চেয়ে অনেক বেশি সঠিক। এছাড়াও, - বনাম * -1 অবশ্যই "অতিরিক্ত জটিল" নয়।
রেক্স এম

4
আমি এই উত্তরটি সিস্টেম-ম্যাথ.অ্যাবস একের চেয়ে ভাল পছন্দ করি, যেহেতু যা ঘটছে তা এক নজরে এটি আরও স্পষ্ট ...
বেসকা

132
int negInt = -System.Math.Abs(myInt)

11
হ্যাঁ, কারণ প্রত্যাখ্যানই লক্ষ্য, সুতরাং একটি অ্যানারি বিয়োগটি সঠিক অপারেটর। অন্যদিকে, নেতিবাচক এক দিয়ে গুণ করা একটি মানকে অস্বীকার করার কৌশল।
স্টিভেন সুদিত 28:30 '

38
এটি একটি কৌশল কারণ এটি প্রাথমিক প্রভাব নয়, পার্শ্ব-প্রতিক্রিয়াতে গণনা করে। আনারি বিয়োগের প্রাথমিক প্রভাবটি অস্বীকার করা। গুণটির প্রাথমিক প্রভাবটি হ'ল গুণ করা। এটি ঠিক তাই ঘটে যে -1 দ্বারা গুণিত করা উপেক্ষা করে। এটা কি পরিষ্কার?
স্টিভেন সুদিত

5
@ স্টিভেনসুডিট নং, * -1 এর চেয়ে সুন্দর নয়। -১ দ্বারা গুণন করা "কৌশল" নয় এটি কোনও সংখ্যাকে negativeণাত্মক করে তোলার গাণিতিক উপায়। সংখ্যাটি -1 * সংখ্যার সংক্ষিপ্তসার মাত্র। এছাড়াও, সংখ্যাটি নেতিবাচক রাখতে অ্যাবস ব্যবহার করা ওভারকিল k myInt<0 ? myInt : -myInt;অনেক ভাল। কেবলমাত্র - অপারেটরটিকে যথাযথ -1 * সংখ্যা প্লাস ওভারলোডিং সক্ষমতার জন্য শর্টহ্যান্ড হিসাবে সরবরাহ করা হয়, * (-1) কে কৌতুক করে না।
থান্ডারগ্রি

93

আপনি অন্য যে কোনও কিছুকে negativeণাত্মক করে তোলেন: তার সামনে একটি নেতিবাচক চিহ্ন রাখুন।

var positive = 6;
var negative = -positive;

8
প্রত্যেকে ইউরি বিয়োগটি ভুলে যায়।
পুনরাবৃত্তি

কী এবং এই মধ্যে ব্যবহারিক পার্থক্য এই উত্তর: stackoverflow.com/questions/1348080/... int myNegInt = System.Math.Abs(myNumber) * (-1);
goodguys_activate

@ মেকারফথিংস 7, আপনি যেটির সাথে লিঙ্ক করেছেন সেটি হ'ল অনেক বেশি সিপিইউ নির্দেশনা - একটি পরম-মান ক্রিয়াকলাপ ( x86 এর উপর কমপক্ষে তিনটি নির্দেশাবলী ), তার পরে একটি এমএইউএল (অথবা সংকলকটি চালাক হলে সম্ভবত একটি এনইজি)। এই উত্তরটি একটি একক, হালকা ওজনের NEG অপকোড, আপনার প্রয়োজনের থেকে কম বা কম কিছুই নয়। ইনপুট নম্বরটি ইতিমধ্যে নেতিবাচক থাকলে অবশ্যই দুটি উত্তর পৃথকভাবে আচরণ করে; যদি (এই প্রশ্নের বিপরীতে) আপনার ইনপুটটি নেতিবাচক হতে পারে, এটি আপনার পক্ষে সিদ্ধান্ত নিয়েছে।
জো হোয়াইট

41

যারা প্রতিক্রিয়া জানিয়েছে তাদের প্রত্যেককে নোট করুন

- Math.Abs(myInteger)

অথবা

0 - Math.Abs(myInteger)

অথবা

Math.Abs(myInteger) * -1

নেতিবাচক সংখ্যাগুলিকে নেতিবাচক রাখার এবং ইতিবাচকগুলি নেতিবাচক করে তোলার উপায় হিসাবে।

এই পদ্ধতির একক ত্রুটি রয়েছে। এটি সমস্ত পূর্ণসংখ্যার জন্য কাজ করে না। Int32প্রকারের ব্যাপ্তি "-2 31 " থেকে "2 31 - 1" পর্যন্ত is এর অর্থ আরও একটি "negativeণাত্মক" নম্বর রয়েছে। ফলস্বরূপ, Math.Abs(int.MinValue)একটি ছুড়ে OverflowException

সঠিক উপায় শর্তযুক্ত বিবৃতি ব্যবহার করা:

int neg = n < 0 ? n : -n;

এই পদ্ধতির "সমস্ত" পূর্ণসংখ্যার জন্য কাজ করে।


আমি আপনাকে সঠিকতার জন্য বিন্দুটি টস করব, তবে যে কোনও কোড যা MinValue এর Abs গ্রহণ না করে তার উপর নির্ভর করে কোনও কোড ভঙ্গুর।
স্টিভেন সুদিত

স্টিভেন: কখনও কখনও, আপনি এমন একটি সমস্যার সমাধান করছেন (যেমন Abs) যা সম্ভবত কাজ করতে পারে না int.MinValue( intরিটার্নের ধরণ ধরে ধরে )) সেই ক্ষেত্রে, ব্যতিক্রম ছুঁড়ে ফেলা ঠিক OK তবে, এই নির্দিষ্ট সমস্যাটির "বৈধ" ফলাফল রয়েছে int.MinValueতবে আপনি যদি Absরাস্তাটি নেন তবে একটি ব্যতিক্রম ছোঁড়ে ।
মেহরদাদ আফশারি

নেতিবাচক স্কেলটি ধনাত্মকটির চেয়ে বড় বলে বলার পরে, আপনি তারপরে গিয়ে কোডটি প্রস্তাব করুন যা এটির জন্য অ্যাকাউন্ট নয়। যদি nহয় -32768তবে -nALSO -32768!!! তদ্ব্যতীত int neg = n < 0 ? n : -n;কোনওটি একেবারে কিছুই করে না বলেই সম্ভবত সমস্ত ক্ষেত্রে সম্ভবত কাজ করা যায় না।
ক্লাইভ গালওয়ে


16
int negInt = 0 - myInt;

বা গ্যারান্টিযুক্ত নেতিবাচক।

int negInt = -System.Math.Abs(someInt);

11

একটি পূর্ণসংখ্যার চিহ্নটি স্যুইচ করতে, আপনি কেবল সাইন অপারেটরটি ব্যবহার করেন:

myInt = -myInt;

আসল মানটি নেতিবাচক হয় বা না তা নির্বিশেষে এটিকে নেতিবাচক করে তুলতে, আপনি প্রথমে অ্যাবস পদ্ধতিটি ব্যবহার করুন:

myInt = -Math.Abs(myInt);

6

আরও মজাদার জন্য:

int myInt = Math.Min(hisInt, -hisInt);

int myInt = -(int)Math.Sqrt(Math.Pow(Math.Sin(1), 2) + Math.Pow(Math.Cos(-1), 2))
            * Math.Abs(hisInt);

2
খুব ঝুঁকিপূর্ণ, আইএমএইচও। যদি একটি বৃত্তের সংজ্ঞা পরিবর্তন হয়?
মুসিজেনেসিস

6

সম্পাদনা: এটি ইতিবাচক ইনপুটগুলির জন্য ভুল ... আমি ভুলতে ভুল করেছিলাম যে -x- এর (2s- পরিপূরক মান) বাকী বিটগুলি তাদের x + এর মানের 'বিপরীত', একই নয়। কেবলমাত্র সাইন বিট পরিবর্তন করা ধনাত্মক সংখ্যার জন্য কাজ করবে না।

আমি এই উদ্দেশ্যে এখানে রেখে দেব ...

বা কৌশলে উপায় (আমার মনে হয়) ...

int y = x | ~ Int.MaxValue;

cause int.MaxValue is 0111 1111 1111 1111 1111 1111 1111 1111

সুতরাং

~int.MaxValue is      1000 0000 0000 0000 0000 0000 0000 0000

এবং অতএব যে কোনও অন্তর্গত 32 এর সাথে সাইন বিটটিতে একটি 1 রাখবে, (এটিকে নেতিবাচক করে তুলবে), এবং অন্য সমস্ত বিট একই রাখবে ...

সম্পাদনা: বাস্তবে, যেহেতু 1000 0000 0000 0000 0000 0000 0000 0000 0000 আসলে মাইনালু, তাই এটিও কাজ করা উচিত:

   int y = x | int.MinValue; // or, to do it to itself,
   x |= int.MinValue;

তাহলে, নেতিবাচক শূন্য সমান? আন্তঃমিনভ্যালু?
পুনরাবৃত্তি

না, দ্বিগুণ পরিপূরকগুলিতে কোনও নেতিবাচক শূন্য নেই। সবগুলি নেতিবাচক হয় 1. একটি স্বাক্ষরিত 8 বিট অন্ত: 10000000 হল -128
চার্লস বেতানা

1
+1 কারণ "এ-এর পরে কোন চিঠি আসে তবে সি এর আগে?"
মুসিজেনিসিস

... এবং নীচে @ মেহরাদের জবাবের জন্য ধন্যবাদ, ইনপুটটি অন্তর্ভুক্ত হলে এটিই একমাত্র পদ্ধতির কাজ করে। মিনভ্যালু ...
চার্লস ব্রেটানা

চার্লস: এটা ভুল। নেতিবাচক সংখ্যার জন্য, এটি কাজ করে তবে ইতিবাচক সংখ্যার জন্য, কেবল সাইন বিটকে উল্টানো হয় না -number1সমস্ত শূন্য এবং এক। বা এর সাথে int.MinValueইঙ্গিত দেওয়ার ফলে 1000000000000000000000000000000001 ফলাফল হবে যা -1(সকলের সমান নয় )
মেহরদাদ আফশারি

6

যদিও আমি এখানে পার্টিতে দেরি করে ফেলেছি, আমি আমার হার্ডওয়ারের দিনগুলি থেকে কিছু দরকারী কৌশলগুলি দিয়েছি। এই সমস্ত স্বাক্ষরিত সংখ্যার জন্য 2 এর প্রশংসা উপস্থাপনা অনুমান করে।

int negate = ~i+1;
int positiveMagnitude = (i ^ (i>>31)) - (i>>31);
int negativeMagnitude = (i>>31) - (i ^ (i>>31));

এই আরও ব্যাখ্যা করতে যত্নশীল? সাথে i == int.MinValue, তারপরে সমস্ত ভেরিয়েবলগুলি -2147483648
ক্লাইভ গালওয়ে

5

শুধুই মজার জন্য:

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "-", positiveInt.ToString()));

আপডেট : এই পদ্ধতির সৌন্দর্য হ'ল আপনি সহজেই এটি একটি ব্যতিক্রম জেনারেটরে রূপান্তর করতে পারেন:

int negativeInt = int.Parse(String.Format("{0}{1}", 
    "thisisthedumbestquestioninstackoverflowhistory", positiveInt.ToString()));

5

আমি ব্যবহার করি myInt = -myInt;

তাই সহজ এবং সহজ

আপনি যদি চান শুধুমাত্র ইতিবাচক

myInt = myInt>0 ? myInt : -myInt;

আমি ওপি হিসাবে কিছুটা আলাদা পরিস্থিতিতে এই উত্তরটির সন্ধান করছিলাম। আমি চাই যে 2 টি মান একে অপরকে নেগেটিভ করতে চাই যদি তাদের মধ্যে একটির 5-অন্য হওয়া উচিত, এর জন্য এটি আমার সেরা সমাধান = ডি
ম্যাথিউ ব্রাউউবার্স

আপনি যেহেতু একটি ওভারফ্লো পেতে হবে int.MaxValueহয় 2147483647, এমনকি var i = int.MaxValue; i++;অভ্যস্ত কাজ
, CMS

4
long negativeNumber = (long)positiveInt - (long)(int.MaxValue + 1);

কেউই বলেনি যে এটি কোনও নির্দিষ্ট নেতিবাচক সংখ্যা হতে হবে ।


ওম, যদি আপনি এটির কোনও নির্দিষ্ট নেতিবাচক সংখ্যা হতে চান তা যত্নশীল না করেন তবে আপনি এটিকে "দীর্ঘ নেতিবাচক নাম্বার = -1" এ সরল করতে পারেন;
বেসকা

@ গুফা: এটি আসলে এখানে রসিকতা।
MusiGenesis




0

একটি সংখ্যাকে ধনাত্মক থেকে নেতিবাচক বা নেতিবাচককে ধনাত্মক রূপান্তর করা:

public static decimal Reverse(this decimal source)
{
     return source * decimal.MinusOne;
}

0

আমি শেয়ার করতে চাই এমন কিছু।

public decimal NumberReevaluate(decimal number, bool isPositive)
{
    var tempNumber = System.Math.Abs(number);
    return isPositive ? tempNumber : -tempNumber;
}

1
number >= 0 == isPositive ? number : -number
ভিটালিয়

0

পূর্বে উল্লিখিত হিসাবে, কেবল -1 দ্বারা গুণ করা ভাল নয় int.MinValue * -1 == int.MinValue

এটি সত্যই আপনার আবেদনের উপর নির্ভর করে, তবে আমার জন্য (জয়স্টিক অক্ষগুলিকে উল্টানো) আমি নিশ্চিত করতে চাই যে সমস্ত চূড়ান্ততা এখনও পৌঁছতে পারে এবং যতটা সম্ভব নিষ্ঠারতা বজায় রাখা যায়।
এই লক্ষ্যে, আমি সর্বোচ্চ মানচিত্রটি <--> * -1
মিনিমাম এবং এর মধ্যে থাকা সমস্ত কিছুই এই কৌশলটি ব্যবহার করে পেয়ে যায়, -32767 ইনভার্ট করার সময় অ্যাক্সেসযোগ্য।

private static int Invert(int value) { if (value == int.MaxValue) return int.MinValue; if (value == int.MinValue) return int.MaxValue; return value * -1; }


ইনভার্টেশন 5হয় না -5, কিন্তু 1/5
ডাফি

-2

বাইনারি ব্যবহার করুন এবং সর্বশেষ বিটটি সরাতে যা নেতিবাচক চিহ্নের জন্য দায়ী।

বা বাইনারি ব্যবহার করুন বা একটি ডেটাটাইপ সাইন যোগ করতে।

এই দ্রাব্যটি অযৌক্তিক এবং অসম্পূর্ণ মনে হতে পারে তবে আমি গ্যারান্টি দিতে পারি এটি দ্রুততম পদ্ধতি।

আমি এই পোস্টটি যা পোস্ট করেছি তার সাথে যদি আপনি পরীক্ষা না করেন তবে খাঁজ দেখাতে পারে: ডি

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

ইন্ট 32 বিট ডেটাটাইপ তাই শেষ বিট (32 তম) সাইনটি নির্ধারণ করে।

এবং এমন একটি মান সহ যা 0 টি 32 স্থানে রয়েছে এবং বাকি 1 টি। এটি নেতিবাচক নং + Ve তে রূপান্তর করবে।

ঠিক বিপরীতে বা একটি মান সহ 32 তম স্থানে এবং বিশ্রাম 0 করে।


-3

X=*-1সমস্ত সংকলকগুলিতে কাজ নাও করতে পারে ... যেহেতু এটি নেতিবাচক পরিবর্তে একটি 'গুণ' 'সাবট্র্যাক্ট' 1 পড়েছে তবে আরও ভাল বেস্টটি হ'ল X=(0-X), [ যেটি থেকে বিভক্ত হয় X-=X]

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