সাইন ইন বেশী হলে স্বাক্ষরকৃত মান ব্যবহার করার সময়?

যখন স্বাক্ষরযুক্ত একটি অস্তিত্বহীন চ্যানেল ব্যবহার করা উপযুক্ত? লুপের জন্য সম্পর্কে কি?

আমি এই সম্পর্কে অনেক মতামত শুনতে এবং আমি দেখতে চেয়েছিলেন যদি কোন একমত মত অনুরূপ কিছু ছিল।

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

আমি জাভা অজ্ঞাত মান আছে না জানি, এবং যে সান মাইক্রোসিস্টেম উপর একটি প্রশস্ত সিদ্ধান্ত হয়েছে 'অংশ

0
যোগ সম্পাদিত
মতামত: 1
আমি এই সহায়ক খুঁজে পেয়েছি: codemines.blogspot.ca/2007/10 / করছে & hellip;
যোগ লেখক mk12, উৎস
আমি মনে করি এই প্রশ্ন বেশ মতামত ভিত্তিক হয়। উপস্থাপিত কোড উভয় ক্ষেত্রেই ঠিক চালানো হবে, তাই আপনি উভয় ব্যবহার করতে পারেন। পারফরম্যান্সের কারনে (কোনও উত্তর আসলে আসলে পারফরম্যান্সের সাথে কাজ করে না) এটি শুধু ব্যক্তিগত স্বাদ।
যোগ লেখক Trilarion, উৎস

5 উত্তর

আমি একটি ভাল কথোপকথন খুঁজতে পেরে আনন্দিত হয়েছিল এই বিষয়ে, আমি সত্যিই এটি আগে অনেক চিন্তা করা না আগে।

সারসংক্ষেপে, স্বাক্ষরিত একটি ভাল সাধারণ পছন্দ - এমনকি যদি আপনি নিশ্চিত হন যে সব নম্বর ইতিবাচক হয় - আপনি যদি পরিবর্তনশীল (যেমন লুপ ক্ষেত্রে একটি সাধারণ হিসাবে) উপর গাণিতিক করতে যাচ্ছেন।

যদি আপনি মাস্কের মত bitwise জিনিসগুলি করতে যাচ্ছেন, তাহলে আরো বেশি আজ্ঞাসমুহ শুরু করতে হবে। অথবা, আপনি সাইন বিট সুবিধা গ্রহণ করে যে অতিরিক্ত ইতিবাচক পরিসীমা পেতে বেপরোয়া করছি।

ব্যক্তিগতভাবে, আমি স্বাক্ষরিত কারণ আমি স্বতঃস্ফূর্তভাবে নিজেকে বিশ্বাস করি না এবং দুটি ধরনের মিশ্রণ না করে (যেমন নিবন্ধের বিরুদ্ধে সতর্ক করে দেওয়া হয়)।

0
যোগ
পরে যে থ্রেডে, এটি দেখায় যে স্বাক্ষরবিহীন অবিশ্বস্ত ইনপুটের মধ্যে ওভারফ্লো সনাক্তকরণের জন্য অত্যন্ত উচ্চতর। দুর্ভাগ্যবশত, ধাঁধা প্রস্তাবিত "উত্তর" সব যে মহান না হয়। খনি হল টেমপ্লেট বুলের পরিমান_ চেক_সাম (স্বাক্ষরযুক্ত একটি, স্বাক্ষরবিহীন খ) {রিটার্ন (একটি <�সীমা) && (b <�সীমা - a); } যদি কেউ স্বাক্ষরিত ধরনের ব্যবহার করে অনুরূপ সহজ এবং সহজবোধ্য উত্তর আছে, আমি এটা দেখতে ভালোবাসব।
যোগ লেখক Ben Voigt, উৎস

size_t is often a good choice for this, or size_type if you're using an STL class.

0
যোগ
শুধুমাত্র যখন আপনি বাইটে কিছু আকারের সাথে কাজ করছেন।
যোগ লেখক mk12, উৎস

উপরে আপনার উদাহরণে, যখন 'আমি' সবসময় ইতিবাচক হবে এবং একটি উচ্চতর পরিসীমা উপকারী হবে, স্বাক্ষরযুক্ত দরকারী হবে। আপনি যেমন 'ঘোষণা' বিবৃতি ব্যবহার করছেন মত, যেমন:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

বিশেষত যখন এই মান পরিবর্তন হবে না।

যাইহোক, যদি আপনি একটি অ্যাকাউন্টিং প্রোগ্রাম করছেন যেখানে মানুষ তাদের অর্থের সাথে দায়িত্বজ্ঞানহীন এবং লাল হয়, আপনি অবশ্যই 'সাইন ইন' ব্যবহার করতে চাইবেন।

আমি সেন্ট সঙ্গে একমত না যদিও থাম্ব একটি ভাল নিয়ম সাইন ইন ব্যবহার করা হয়, যা সি আসলে ডিফল্ট, তাই আপনি আচ্ছাদিত করছি।

0
যোগ

সি এবং সি ++ কম্পাইলার আপনাকে স্বাক্ষরিত এবং স্বাক্ষরযুক্ত ধরনের তুলনা করলে সতর্কতা উৎপন্ন করবে; আপনার উদাহরণ কোডে, আপনি আপনার লুপ ভ্যারিয়েবলটি স্বাক্ষরিত না করে এবং সতর্কবার্তা ছাড়াই কম্পাইলার জেনারেটর কোডটি করতে পারেন (অনুমান করা হচ্ছে যে সতর্কতা চালু করা হয়েছে)।

স্বাভাবিকভাবেই, আপনি সতর্কতার সাথে কম্পাইল করছেন সব পথ বন্ধ, ডান?

এবং, আপনি "ত্রুটি হিসাবে চিকিত্সা সতর্কতা" এটি এক ধাপ এগিয়ে নিতে সঙ্গে কম্পাইল বিবেচনা?

The downside with using signed numbers is that there's a temptation to overload them so that, for example, the values 0->n are the menu selection, and -1 means nothing's selected - rather than creating a class that has two variables, one to indicate if something is selected and another to store what that selection is. Before you know it, you're testing for negative one all over the place and the compiler is complaining about how you're wanting to compare the menu selection against the number of menu selections you have - but that's dangerous because they're different types. So don't do that.

0
যোগ

আমি মনে করি যদি আপনার ব্যবসা কেস একটি নেতিবাচক নম্বর অবৈধ যে নির্দেশ করে যে, আপনি চাই একটি ত্রুটি দেখানো বা নিক্ষেপ করা হবে

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

0
যোগ