স্বাক্ষরবিহীন সংখ্যা কেন প্রয়োগ করা হয়?


12

মাইক্রোপ্রসেসর সিস্টেম কেন স্বাক্ষরযুক্ত সংখ্যা প্রয়োগ করে তা আমি বুঝতে পারি না। আমার ধারণা, শর্তসাপেক্ষ শাখার ব্যয়টি কেবল দ্বিগুণ, যেহেতু বৃহত্তর, .etc এর চেয়েও কম, স্বাক্ষরিতের চেয়ে আলাদা অ্যালগরিদম প্রয়োজন, এখনও কি এমন কোনও অ্যালগরিদম রয়েছে যা স্বাক্ষরযুক্ত সংখ্যাগুলির জন্য উল্লেখযোগ্য সুবিধা?

আমার প্রশ্নটি আংশিকভাবে কেন তাদের সংকলক দ্বারা সমর্থন করার বিপরীতে নির্দেশিকাতে থাকতে হবে?


27
মূলত স্বাক্ষরবিহীন সংখ্যাগুলি হ'ল মানক, স্বাক্ষরিত negativeণাত্মক সংখ্যা সরবরাহ করতে প্রয়োগ করা হয়।
পিটার বি

37
বিশ্বের অনেকগুলি ডেটা অ-সংখ্যাসূচক। স্বাক্ষরবিহীন প্রকারগুলি ব্যবহার করে অ-সংখ্যাযুক্ত ডেটা সহজেই ম্যানিপুলেট করা হয়। জাভাতে স্বাক্ষরবিহীন সংখ্যাযুক্ত প্রকারগুলি নেই এটি একটি ব্যর্থতা, যার ফলে নন-অঙ্কিত ডেটা (যেমন সংক্ষেপণ, ইত্যাদি ..) ব্যবহার করতে হয় এমন অনেকগুলি বাগের কারণ হয়।
এরিক tদ

6
@jtw এরিক বলেছেন নেতিবাচক পিক্সেল রঙ বা নেতিবাচক চরিত্রের মতো কোনও জিনিস নেই। সুতরাং এটির জন্য স্বাক্ষরিত পূর্ণসংখ্যাগুলি ব্যবহার করা অপব্যয় হবে, আপনি ঠিকানার জায়গার অর্ধেকটি ছেড়ে দেবেন।
মার্টিন মাট

26
আমি এখানে একা রয়েছি কিনা তা নিশ্চিত নই, তবে অ্যাপ্লিকেশনগুলি বিকাশকালে আমার স্বাক্ষরিত পূর্ণসংখ্যার প্রয়োজন এটি আশ্চর্যজনকভাবে বিরল । আমার প্রায় সময় যা প্রয়োজন তা হ'ল হয় একটি (স্বাক্ষরযুক্ত) প্রাকৃতিক সংখ্যা (একটি ইতিবাচক আকার, সাধারণত), বা একটি স্বাক্ষরিত ভাসমান-পয়েন্ট নম্বর। ব্যতিক্রমগুলি মুদ্রার মতো জিনিস, তবে সেগুলি খুব বিরল; আমার কাছে, স্বাক্ষরবিহীন পূর্ণসংখ্যাগুলি আদর্শ এবং স্বাক্ষরিত পূর্ণসংখ্যাগুলি ব্যতিক্রম!
থমাস

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

উত্তর:


39

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

এছাড়াও, স্বাক্ষরবিহীন গাণিতিকগুলির সাথে অন্যদের বাস্তবায়ন করার জন্য এটি বেশ সোজা এগিয়ে রয়েছে (যদি সবচেয়ে দক্ষতার সাথে না হয়)। কথোপকথনটি সত্য নয়।


3
ইবিসিডিকের একটি মাত্র "আমি" রয়েছে।
Ruslan

4
@ রুসলান - তবে এটি দুটি উচ্চারণের মতো উচ্চারণযোগ্য । <g>
পিট বেকার

5
পছন্দ করুন EBCDIC উচ্চারিত হয় eb -see- ডিক।
মাইক নকিস

19

তুলনা ক্রিয়াকলাপের জন্য বেশিরভাগ হার্ডওয়্যার ব্যয়ের বিয়োগফল। তুলনা করে ব্যবহৃত বিয়োগের আউটপুটটি মূলত রাষ্ট্রের তিনটি বিট হয়:

  • সমস্ত বিট শূন্য কিনা (অর্থাত সমান শর্ত),
  • ফলাফল সাইন বিট
  • বিয়োগের ক্যারি বিট (অর্থাৎ 32-বিট কম্পিউটারে 33 তম হাই অর্ডার বিট)

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

একমাত্র আসল ব্যয় হ'ল নির্দেশ সেট আর্কিটেকচারের তুলনায় অতিরিক্ত মোডগুলির এনকোডিংয়ের প্রয়োজনীয়তা, যা নির্দেশের ঘনত্বকে প্রান্তিকভাবে হ্রাস করতে পারে। তবুও, এটি বেশ স্বাভাবিক যে হার্ডওয়্যারটিতে প্রচুর নির্দেশনা রয়েছে যা কোনও প্রদত্ত ভাষা ব্যবহার করে না।


1
স্বাক্ষরযুক্ত সংখ্যার তুলনা করতে বিয়োগের প্রয়োজন হয় না। এটি বাম থেকে ডান বিটওয়াইজ তুলনা দ্বারা অর্জন করা যেতে পারে।
জোনাথন রোজেন

10
@ জোনাথানরোসেন কিন্তু প্রসেসররা এটি প্রয়োগ করে না। বিপরীতে, 2'-এর পরিপূরক প্রসেসরের পক্ষে এটির ALU- তে বিয়োগ (বহন / ধার নেওয়া বা ছাড়াই) বাস্তবায়ন না করা প্রায় অকল্পনীয়। ডিজাইনারের তত্ক্ষণাত্ চিন্তা করা হ'ল একই পাথর, তুলনা করে অন্য পাখিটিকে হত্যা করার জন্য প্রয়োজনীয় এএলইউ ব্যবহার করা। তুলনা করা কেবল তখন বিয়োগফল হয়ে যায় যেখানে ফলাফলটি নিবন্ধকার ফাইলে ফিরে লেখা হয় না।
আইভিলনোটেক্সিস্ট আইডোনোটেক্সিস্ট

4
+1: এটি জিজ্ঞাসা করা প্রশ্নের সঠিক উত্তর। সংক্ষিপ্তকরণ: কারণ আপনি ইতিমধ্যে স্বাক্ষরিত প্রয়োগ করেছেন যখন স্বাক্ষরযুক্ত অপারেশনগুলি কার্যকর করা প্রায় বিনামূল্যে
পেরিটা ব্রেটা

10
@ পেরিটাব্রেটা এটি অন্যান্য উপায়েও কাজ করে। আধুনিক সিপিইউগুলিতে স্বাক্ষরযুক্ত এবং স্বাক্ষরবিহীন সংখ্যাগুলি প্রায় অভিন্ন, যা মূল বিষয় যা ওপি স্বীকৃতি দেয় না। এমনকি তুলনা নির্দেশাবলী স্বাক্ষরিত এবং স্বাক্ষরবিহীন জন্য একই - দুজনের পরিপূরক স্বাক্ষরিত পূর্ণসংখ্যার যুদ্ধগুলিতে জয়লাভ করার কারণগুলির মধ্যে এটি একটি কারণ :)
লুয়ান

3
@ এসভিডজেন> অন্যান্য উত্তরগুলি যেমন বলেছে, এটি অন্যান্য উপায়ে কাজ করে। প্রাথমিক উদ্বেগ হ'ল স্বাক্ষরযুক্ত সংখ্যা, যা মূলত সমস্ত কিছুর জন্য ব্যবহৃত হয় (মেমরি ঠিকানা, আইও / পোর্টস, চরিত্রের উপস্থাপনা, ...)। স্বাক্ষর না করা হলে স্বাক্ষরযুক্ত সংখ্যাগুলি সস্তার হয়ে আসে এবং বিরল ইভেন্টে সেগুলি পছন্দসই হয়ে যায়।
স্পেকট্রা

14

কারণ, যদি আপনাকে এমন কিছু গণনা করা প্রয়োজন যা সর্বদা থাকে >= 0 , আপনি অকারণে স্বাক্ষরিত পূর্ণসংখ্যা ব্যবহার করে আপনার গণনার স্থানটি অর্ধেকে কেটে ফেলবেন।

আপনি নিজের ডাটাবেস টেবিলগুলিতে রাখছেন যে স্বয়ংক্রিয় বর্ধিত INT পিকে বিবেচনা করুন। আপনি যদি সেখানে স্বাক্ষরিত পূর্ণসংখ্যা ব্যবহার করেন, আপনার টেবিলটি কোনও বেনিফিট সহ একই ক্ষেত্রের আকারের জন্য HALF যতটা রেকর্ড রাখতে পারে

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

হার্ডওয়্যার দৃষ্টিকোণ থেকে, স্বাক্ষরবিহীন পূর্ণসংখ্যাগুলি সহজ। তারা সম্ভবত গণিত সম্পাদনের সবচেয়ে সহজ বিট কাঠামো। এবং কোনও সন্দেহ নেই, আমরা একটি সংকলকটিতে পূর্ণসংখ্যার ধরণের (বা এমনকি ভাসমান পয়েন্ট!) সিমুলেট করে হার্ডওয়্যারটি সহজ করতে পারি। সুতরাং, কেন স্বাক্ষরযুক্ত এবং স্বাক্ষরিত পূর্ণসংখ্যা উভয়ই হার্ডওয়্যারে প্রয়োগ করা হয় ?

ভাল ... পারফরম্যান্স!

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


2
এই লাইনের পাশাপাশি, অ্যারে বাউন্ড চেকিং করার সময় আপনি নিজেকে অপারেশন বাঁচাতে পারেন। আপনি যদি স্বাক্ষর વિના স্বাক্ষরিত পূর্ণসংখ্যা ব্যবহার করেন তবে আপনাকে কেবলমাত্র সরবরাহ করা সূচকটি অ্যারের আকারের চেয়ে কম কিনা তা পরীক্ষা করতে হবে (কারণ এটি নেতিবাচক হতে পারে না)।
রিওয়ালক

2
@ dan04 এটি অবশ্যই করতে পারে ... তবে, আপনি যদি 0 বা 1 থেকে শুরু করে একটি স্বয়ং-বর্ধনশীল ইন্ট ব্যবহার করেন, যা বেশ সাধারণ অভ্যাস, আপনি আপনার উপলব্ধ সংখ্যার অর্ধেক ব্যবহারকে বাদ দিয়েছেন। এবং আপনি যখন অনুমেয়ভাবে -2 whatever 31 (বা যাই হোক না কেন) গণনা শুরু করতে পারেন, আপনার আইডি স্পেসের মাঝখানে আপনার একটি সম্ভাব্য "প্রান্ত" কেস থাকবে।
এসভিডজেন

1
আপনার ক্ষেত্রের অর্ধেক অংশ কেটে ফেলা যদিও এটি একটি দুর্বল যুক্তির মতো। আপনার অ্যাপ্লিকেশনটির 2 বিলিয়ন এরও বেশি প্রয়োজন হলে এর সম্ভাবনা 4 মিলিয়ন এরও বেশি হয়।
কর্সিকা

1
@ করসিকা: সেই কারণে, যদি এটির 4 এরও বেশি প্রয়োজন হয় তবে এটির জন্য সম্ভবত 8, তারপরে 16, ইত্যাদি প্রয়োজন it

1
@ ভাটিসিসনাম, আপনি 8, 16, 32, বা 64 বিটের পূর্ণসংখ্যার ধরণের ব্যবহার করেন। স্বাক্ষরযুক্ত না বলা ভাল কারণ আপনি স্বাক্ষরিত বাইটে 31 বিট ধনাত্মক পূর্ণসংখ্যার স্থানের সীমিত পরিসরের পরিবর্তে সমস্ত 32 বিট পান তবে বেশিরভাগ ক্ষেত্রেই এটি খুব বেশি গুরুত্ব পাবে না।
কর্সিকা

9

আপনার প্রশ্ন দুটি অংশ নিয়ে গঠিত:

  1. স্বাক্ষরবিহীন পূর্ণসংখ্যার উদ্দেশ্য কী?

  2. স্বাক্ষরযুক্ত সাক্ষাত্কারগুলি কি সমস্যার পক্ষে মূল্যবান?

১. স্বাক্ষরবিহীন পূর্ণসংখ্যার উদ্দেশ্য কী?

স্বাক্ষরযুক্ত সংখ্যাগুলি, বেশ সহজভাবে, এমন এক শ্রেণীর পরিমাণের প্রতিনিধিত্ব করে যার জন্য নেতিবাচক মানগুলি অর্থহীন। অবশ্যই, আপনি বলতে পারেন যে "আমার কাছে কতগুলি আপেল আছে?" এই প্রশ্নের উত্তর কারও কাছে কিছু আপেল পাওনা থাকলে তা নেতিবাচক নম্বর হতে পারে তবে "আমার কত স্মৃতি আছে" এই প্রশ্নটি সম্পর্কে কী? - আপনার নেতিবাচক পরিমাণের স্মৃতি থাকতে পারে না। সুতরাং, স্বাক্ষরবিহীন পূর্ণসংখ্যাগুলি এ জাতীয় পরিমাণের প্রতিনিধিত্ব করার জন্য খুব উপযুক্ত এবং স্বাক্ষরিত পূর্ণসংখ্যার তুলনায় দ্বিগুণ ইতিবাচক মানগুলি উপস্থাপন করতে সক্ষম হওয়ার সুবিধা তাদের রয়েছে। উদাহরণস্বরূপ, আপনি 16-বিট স্বাক্ষরিত পূর্ণসংখ্যার সাথে সর্বাধিক মানটি 32767, যখন একটি 16-বিট স্বাক্ষরযুক্ত পূর্ণসংখ্যার সাথে এটি 65535।

২. স্বাক্ষরযুক্ত স্বাক্ষরগুলি কি সমস্যার পক্ষে মূল্যবান?

স্বাক্ষরবিহীন পূর্ণসংখ্যাগুলি আসলে কোনও সমস্যার প্রতিনিধিত্ব করে না, সুতরাং, হ্যাঁ, তারা এটি মূল্যবান। আপনি দেখুন, তাদের জন্য "অ্যালগরিদম" অতিরিক্ত সেট প্রয়োজন হয় না; এগুলি বাস্তবায়নের জন্য প্রয়োজনীয় সার্কিটরি স্বাক্ষরিত পূর্ণসংখ্যার প্রয়োগের জন্য প্রয়োজনীয় সার্কিটির একটি উপসেট।

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

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

তুলনাটিও একইভাবে কাজ করে, যেহেতু ফলাফলটি বিয়োগ-বাতিল-ছাড়া আর কিছুই নয়, কেবলমাত্র পার্থক্য শর্তাধীন শাখা (জাম্প) নির্দেশিকায়, যা সিপিইউর বিভিন্ন পতাকা চিহ্নিত করে কাজ করে যা দ্বারা নির্ধারিত হয় পূর্ববর্তী (তুলনা) নির্দেশনা। এই উত্তরে: /programming//a/9617990/773113 আপনি কীভাবে ইন্টেল x86 আর্কিটেকচারে কাজ করেন তার একটি ব্যাখ্যা পেতে পারেন। যা ঘটে তা হ'ল স্বাক্ষরযুক্ত বা স্বাক্ষরযুক্ত হিসাবে শর্তসাপেক্ষ জাম্প নির্দেশের উপাধি নির্ভর করে এটি কোন পতাকাগুলি পরীক্ষা করে।


1
আমার প্রশ্নটি এগুলি ধরে নিয়েছে, অ্যালগরিদমের দ্বারা আমি বোঝাতে চেয়েছি এর চেয়ে কম এর চেয়ে কম নিয়মের চেয়ে আলাদা ছিল। আমি যে ব্যয়টি দেখতে পাচ্ছি তাতে প্রচুর অতিরিক্ত নির্দেশ রয়েছে। যদি উচ্চ স্তরের প্রোগ্রামগুলি বিটগুলির নিদর্শন হিসাবে ডেটা দেখতে চায় তবে এটি সহজেই প্রয়োগ করা যেতে পারে একটি সংকলক দ্বারা বলুন
jtw

3
@ জেটিডব্লিউ - তবে মুল বক্তব্যটি হ'ল এই অতিরিক্ত নির্দেশাবলী স্বাক্ষরিত সংখ্যার জন্য প্রয়োজনীয় নির্দেশাবলীর সাথে খুব মিল এবং তাদের জন্য প্রয়োজনীয় প্রায় সার্কিটরি ভাগ করা যায় । উভয় ধরণের বাস্তবায়নের অতিরিক্ত ব্যয় প্রায় শূন্য।
পেরিটা ব্রেটা

1
হ্যাঁ এটি আমার প্রশ্নের জবাব দেয়, অতিরিক্ত শাখার নির্দেশাবলী অল্প ব্যয়ের সাথে আসে এবং তারা প্রায়শই অনুশীলনে কার্যকর হয়
jtw

1
"বিভাগ এবং গুণনের ক্ষেত্রে স্বাক্ষরযুক্ত অপারেশনগুলির জন্য কিছু অতিরিক্ত হ্যান্ডলিং প্রয়োজন" আমার মনে হয় আপনার এটি পিছনের দিকে রয়েছে। স্বাক্ষরযুক্ত মান সহ গুণ এবং বিভাগ সহজ division স্বাক্ষরিত অপারেশনগুলি মোকাবেলায় অতিরিক্ত হ্যান্ডলিং প্রয়োজন।
কোডি গ্রে

@ কোডি গ্রে আমি জানতাম যে কেউ এই কথা বলবে। আপনি অবশ্যই, ঠিক। এটি আমার বক্তব্যের পিছনে যুক্তি, যা আমি প্রথমে ব্রেভিটির জন্য বাদ দিয়েছিলাম: একটি সিপিইউ সম্ভবত স্বাক্ষরযুক্ত-কেবলমাত্র গুণ এবং বিভাগের প্রস্তাব দিতে পারে না, কারণ স্বাক্ষরিত সংস্করণগুলি এত কার্যকর। প্রকৃতপক্ষে, স্বাক্ষরযুক্ত গুণ এবং বিভাগ একটি আবশ্যক; স্বাক্ষরবিহীন alচ্ছিক। অতএব, স্বাক্ষরবিহীন এছাড়াও প্রস্তাব করা হয়, এটি একটি সামান্য বিট আরও বর্তনী প্রয়োজন হিসাবে দেখা যেতে পারে।
মাইক নকিস

7

মাইক্রোপ্রসেসরগুলি সহজাত স্বাক্ষরযুক্ত নয়। স্বাক্ষরযুক্ত সংখ্যাগুলি এমন জিনিস যা বাস্তবায়িত হয়, অন্যভাবে নয়।

কম্পিউটারগুলি স্বাক্ষরিত সংখ্যাগুলি ছাড়াই সূক্ষ্মভাবে কাজ করতে পারে, তবে এটি আমাদের, .ণাত্মক সংখ্যার প্রয়োজন এমন মানুষ, সুতরাং স্বাক্ষরটির আবিষ্কার হয়েছিল।


4
অনেক মাইক্রোপ্রসেসর বিভিন্ন ক্রিয়াকলাপের জন্য স্বাক্ষরিত এবং স্বাক্ষরযুক্ত উভয় নির্দেশিকা রয়েছে।

1
@ ওয়াটসিসনাম: এটি বিপরীত: অনেক মাইক্রোপ্রসেসরের কেবল স্বাক্ষরবিহীন নির্দেশাবলী রয়েছে। একটি কয়েক স্বাক্ষরিত নির্দেশাবলী আছে। এটি কারণ 2s- পরিপূরক পাটিগণিতের সাথে বিট মান সমান হয় আবহাওয়া নির্বিশেষে সংখ্যাটি স্বাক্ষরিত বা স্বাক্ষরিত না হয় এবং কীভাবে নম্বরটি পড়ে তা কেবল ব্যাখ্যার বিষয় - তাই এটি সংকলক বৈশিষ্ট্য হিসাবে এটি কার্যকর করা সহজ। সাধারণত কেবলমাত্র পুরানো মাইক্রো যা ধরে নেয় যে প্রোগ্রামারগণ সংকলক ব্যবহার করেন না তাদের কাছে সমাবেশ কোডটি পাঠযোগ্য।
slebetman

3

কারণ তাদের কাছে আরও একটি বিট রয়েছে যা স্টোরেজের জন্য সহজেই পাওয়া যায় এবং আপনার নেতিবাচক সংখ্যার বিষয়ে চিন্তা করতে হবে না। এর চেয়ে বেশি কিছু নেই।

এখন আপনার যদি এই অতিরিক্ত বিটের দরকার পড়ার উদাহরণ প্রয়োজন তবে আপনি যদি তাকান তবে প্রচুর পরিমাণে পাওয়া যাবে।

আমার প্রিয় উদাহরণটি দাবা ইঞ্জিনগুলির বিটবোর্ড থেকে আসে। দাবা বোর্ডে 64৪ টি স্কোয়ার রয়েছে, সুতরাং এটি unsigned longচলন জেনারেশনের চারদিকে ঘোরে বিভিন্ন ধরণের অ্যালগরিদমের জন্য নিখুঁত সঞ্চয় দেয়। আপনার বাইনারি অপারেশন করা প্রয়োজন (সেইসাথে শিফট অপারেশন !!) বিবেচনা করে, এমএসবি সেট করা থাকলে কী বিশেষ জিনিস ঘটে যায় তা নিয়ে চিন্তিত হওয়া কেন সহজ নয় তা বোঝা সহজ। এটি স্বাক্ষরযুক্ত দীর্ঘ দিয়ে সম্পন্ন করা যেতে পারে তবে স্বাক্ষরবিহীন স্বাক্ষর ব্যবহার করা অনেক সহজ।


3

খাঁটি গণিতের পটভূমি থাকা, আগ্রহী যে কারও পক্ষে এটি কিছুটা বেশি গাণিতিক।

যদি আমরা 8 বিট স্বাক্ষরিত এবং স্বাক্ষরবিহীন পূর্ণ পূর্ণসংখ্যার সাথে শুরু করি, তবে আমাদের কাছে যা আছে তা মূলত পূর্ণসংখ্যা 256, যতদূর যোগ এবং গুণনের বিষয়, 2 এর পরিপূরকটি নেতিবাচক পূর্ণসংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয় (এবং প্রতিটি আধুনিক প্রসেসর এটি এভাবে করে) ।

জিনিস দুটি যেখানে পৃথক: একটি তুলনা অপারেশন। এক অর্থে, পূর্ণসংখ্যার মডুলো 256 সেরা সংখ্যার বৃত্ত হিসাবে বিবেচিত হয় (যেমন পুরানো ধাঁচের এনালগ ক্লকফেসে পূর্ণসংখ্যা মডুলো 12 করা)। সংখ্যার তুলনা (x x y) অর্থবহ করার জন্য, আমাদের সিদ্ধান্ত নিতে হবে যে সংখ্যাগুলি অন্যের তুলনায় কম। গণিতজ্ঞের দৃষ্টিকোণ থেকে আমরা 256 পূর্ণসংখ্যার মডুলোটি 256 কোনওভাবে সমস্ত পূর্ণসংখ্যার সেটে এম্বেড করতে চাই। 8 বিট পূর্ণসংখ্যার মানচিত্র তৈরি করা যার বাইনারি উপস্থাপনাটি পূর্ণসংখ্য 0 এর সমস্ত শূন্য হয় তা করণীয় স্পষ্ট। এরপরে আমরা অন্যদের মানচিত্রের দিকে এগিয়ে যেতে পারি যাতে '0 + 1' (একটি রেজিস্টার শূন্যের ফলাফল, কুঠার বলতে, এবং এটি 'ইনক কুড়াল' এর মাধ্যমে একের সাথে বাড়ানোর ফলে) পূর্ণসংখ্য 1 এ যায় এবং এইভাবেই। আমরা -1 দিয়ে একই কাজ করতে পারি, উদাহরণস্বরূপ পূর্ণসংখ্যার সাথে '0-1' ম্যাপিং এবং '0-1-1' পূর্ণসংখ্যা -2। আমাদের অবশ্যই নিশ্চিত করতে হবে যে এই এম্বেডিংটি একটি ফাংশন, সুতরাং দুটি পূর্ণসংখ্যার সাথে একটি একক 8 বিট পূর্ণসংখ্যার মানচিত্র তৈরি করতে পারে না। যেমন, এর অর্থ হ'ল আমরা যদি সমস্ত সংখ্যার পূর্ণসংখ্যার সেটে মানচিত্র করি তবে 0 0 এর সাথে কিছু কম 0 এবং কিছুটা 0 এর চেয়ে বেশি হবে 8 8 বিট পূর্ণসংখ্যার সাথে এটি করার জন্য প্রয়োজনীয়ভাবে 255 উপায় রয়েছে (অনুযায়ী আপনি সর্বনিম্ন 0 থেকে -255 পর্যন্ত কী চান তা অবধি)। তারপরে আপনি '0 <y - x' এর ক্ষেত্রে 'x <y' সংজ্ঞা দিতে পারেন।

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

অন্য সমস্যাটি হ'ল 16 বিট ইন্টিজারের স্পেসে 8 বিট ইন্টিজার ম্যাপিং। -1 যায় -1 এ? 0xFF -1 প্রতিনিধিত্ব করে বোঝানো হলে আপনি এটি চান। এই ক্ষেত্রে, সাইন-প্রসারিত করণীয় বোধগম্য জিনিস, যাতে 0xFF 0xFFFF এ যায়। অন্যদিকে, যদি 0xFF 255 প্রতিনিধিত্ব করে বোঝানো হয়, তবে আপনি এটি 0xFFFF এর পরিবর্তে 0x00FF এ 255 এ ম্যাপ করতে চান।

এটি 'শিফট' এবং 'গাণিতিক শিফট' অপারেশনের মধ্যেও পার্থক্য।

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


আমি গাণিতিক পদ্ধতির পছন্দ করি, তবে কেবলমাত্র একটি নির্দিষ্ট বৃহত্তর আকারে প্রচারের চিন্তা করার পরিবর্তে, অসীম দৈর্ঘ্যের বাইনারি সংখ্যায় অপারেশনগুলির ক্ষেত্রে সাধারণকরণ করা ভাল বলে আমি মনে করি। যে কোনও সংখ্যার থেকে ডানদিকে কে এর অঙ্কগুলি 0 এবং ফলাফলের ডানদিকের কে সংখ্যা 1 হবে এবং 1 এটি অনুপস্থিতির মাধ্যমে প্রমাণ করতে পারে যে যদি কেউ অসীম সংখ্যক বিট দিয়ে গণিত পরিচালনা করে থাকে তবে প্রতিটি বিট স্বাক্ষরিত হবে না For গণিত, একটি সংখ্যার নীচের বিটগুলি বাদে সমস্ত কিছু উপেক্ষা করে।
সুপারক্যাট

2

বিদ্যমান স্বাক্ষরিত পূর্ণসংখ্যার সাথে সিপিইউ ডিজাইনে স্বাক্ষরযুক্ত পূর্ণসংখ্যা যোগ করার জন্য প্রয়োগ ব্যয়টি পরীক্ষা করতে দেয়।

একটি সাধারণ সিপিইউতে নিম্নলিখিত গাণিতিক নির্দেশাবলী প্রয়োজন:

  • ADD (যা দুটি মান যুক্ত করে এবং অপারেশন উপচে পড়লে একটি পতাকা সেট করে)
  • এসইউবি (যা অন্যের থেকে একটি মানকে বিয়োগ করে এবং বিভিন্ন পতাকা সেট করে - আমরা নীচে সেগুলি নিয়ে আলোচনা করব)
  • সিএমপি (যা মূলত 'এসইউবি হয় এবং ফলাফলটি বাতিল করে দেয়, কেবল পতাকা রাখুন')
  • এলএসএইচ (বাম শিফট, ওভারফ্লোতে একটি পতাকা সেট করুন)
  • আরএসএইচ (ডান শিফট, একটি 1 স্থানান্তরিত হলে একটি পতাকা সেট করুন)
  • উপরের সমস্ত নির্দেশাবলীর বৈকল্পিক যা পতাকাগুলি থেকে বহন / ধার নেওয়া পরিচালনা করে, আপনাকে সিপিইউ নিবন্ধকের চেয়ে বড় ধরণের কাজ করতে নির্দেশাবলী একসাথে চেইন করতে দেয়
  • মুল (গুন, পতাকা নির্ধারণ, ইত্যাদি - সর্বজনীন উপলভ্য নয়)
  • ডিআইভি (বিভক্ত করুন, পতাকা সেট করুন ইত্যাদি - অনেকগুলি সিপিইউ আর্কিটেকচারের এর অভাব রয়েছে)
  • একটি ছোট পূর্ণসংখ্যার প্রকার (উদাহরণস্বরূপ 16-বিট) থেকে একটি বৃহত্তর (যেমন 32-বিট) এ সরান। স্বাক্ষরিত পূর্ণসংখ্যাগুলির জন্য, এটিকে সাধারণত এমওভিএসএক্স বলা হয় (সাইন এক্সটেন্ডের সাথে সরানো)।

এটির জন্য যৌক্তিক নির্দেশাবলীও দরকার:

  • শূন্য উপর শাখা
  • বৃহত্তর উপর শাখা
  • কম শাখা
  • উপচে পড়া শাখা
  • উপরের সমস্তটির নেতিবাচক সংস্করণ

স্বাক্ষরিত পূর্ণসংখ্যার তুলনায় উপরের শাখাগুলি সম্পাদন করতে, সবচেয়ে সহজ উপায় হ'ল এসইউবি নির্দেশটি নিম্নলিখিত পতাকাগুলি সেট করে:

  • জিরো। বিয়োগের ফলে শূন্যের মান হয় কিনা তা সেট করুন।
  • ওভারফ্লো। বিয়োগটি সর্বাধিক তাৎপর্যপূর্ণ বিট থেকে মান ধার নিয়েছে কিনা তা সেট করুন।
  • চিহ্ন. ফলাফলের সাইন বিট সেট করুন।

তারপরে পাটিগণিত শাখাগুলি প্রয়োগ করা হবে:

  • শূন্যের উপর শাখা: যদি শূন্য পতাকা সেট করা থাকে
  • কম শাখা: যদি সাইন পতাকা ওভারফ্লো পতাকা থেকে আলাদা হয়
  • বৃহত্তর শাখা: যদি সাইন পতাকাটি ওভারফ্লো পতাকার সমান হয় এবং শূন্য পতাকাটি পরিষ্কার থাকে।

এগুলির অবহেলাগুলি কীভাবে প্রয়োগ করা হয় তা থেকেই স্পষ্টভাবে অনুসরণ করা উচিত।

সুতরাং আপনার বিদ্যমান ডিজাইন ইতিমধ্যে স্বাক্ষরিত পূর্ণসংখ্যার জন্য এই সমস্ত প্রয়োগ করে। স্বাক্ষরবিহীন পূর্ণসংখ্যা যোগ করতে এখন আমাদের কী করা উচিত তা বিবেচনা করুন:

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

নোট করুন যে প্রতিটি ক্ষেত্রে, পরিবর্তনগুলি খুব সহজ , এবং কেবলমাত্র সার্কিটরির একটি ছোট্ট অংশটি চালু বা বন্ধ করে দিয়ে প্রয়োগ করা যেতে পারে বা একটি নতুন পতাকা নিবন্ধ যুক্ত করে একটি মান দ্বারা নিয়ন্ত্রণ করা যায় যা এর অংশ হিসাবে গণনা করা দরকার needs নির্দেশের প্রয়োগ যাইহোক।

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


আপনাকে ধন্যবাদ, এটি আমার প্রশ্নের উত্তর দেয়, ব্যয় কম হয় এবং নির্দেশাবলী প্রায়শই কার্যকর
jtw

1
মাল্টি-স্পষ্টতা পাটিগণিত করার সময় স্বাক্ষরযুক্ত ডাবল-আকারের গুণটি প্রয়োজনীয়, আরএসএ এনক্রিপশন সম্পাদন করার সময় সম্ভবত 2x সামগ্রিক গতির উন্নতির জন্য ভাল। এছাড়াও, স্বাক্ষরযুক্ত এবং স্বাক্ষরযুক্ত ক্ষেত্রে পৃথক পৃথক, তবে যেহেতু স্বাক্ষরযুক্ত মামলাটি সহজ এবং বিভাগ যথেষ্ট বিরল এবং যথেষ্ট ধীর যে কয়েকটি নির্দেশ যুক্ত করা বেশি ক্ষতি করবে না, তাই করার সবচেয়ে সহজ কাজটি হ'ল কেবল স্বাক্ষরবিহীন বিভাগ বাস্তবায়ন করা এবং তারপরে কিছু সাইন-হ্যান্ডলিং যুক্তি দিয়ে এটি মোড়ানো।
সুপারক্যাট

2

স্বাক্ষরবিহীন সংখ্যাগুলি এমন পরিস্থিতিতে পরিচালনা করতে মূলত উপস্থিত থাকে যেখানে একজনের কাছে একটি মোড়ক বীজগণিত রিং প্রয়োজন (একটি 16-বিট স্বাক্ষরযুক্ত প্রকারের জন্য, এটি পূর্ণসংখ্যার সংমিশ্রণ 65536 এর রিং হবে)। একটি মান নিন, মডুলাসের চেয়ে কম পরিমাণ যুক্ত করুন এবং দুটি মানের মধ্যে পার্থক্যটি যোগ করা পরিমাণ হবে be বাস্তব-জগতের উদাহরণ হিসাবে, যদি কোনও ইউটিলিটি মিটার এক মাসের শুরুতে 9995 পড়ে এবং একটিতে 23 টি ইউনিট ব্যবহার করে, মিটারটি মাসের শেষে 0018 পড়বে। বীজগণিত-রিং টাইপ ব্যবহার করার সময়, ওভারফ্লো মোকাবেলায় বিশেষ কিছু করার দরকার নেই। 0018 থেকে 9995 বিয়োগ করলে 0023 আসবে, নিখুঁতভাবে ব্যবহৃত এককগুলির সংখ্যা।

পিডিপি-১১-এ, মেশিনটি যার জন্য সি প্রয়োগ করা হয়েছিল, সেখানে কোনও স্বাক্ষরবিহীন পূর্ণসংখ্যার ধরণ ছিল না কিন্তু স্বাক্ষরিত প্রকারগুলি মডুলার গাণিতিকের জন্য ব্যবহার করা যেতে পারে যা 5৫5৩৫ এবং ০ এর চেয়ে ৩7767 and -৩7768 between এর মধ্যে আবৃত ছিল। প্ল্যাটফর্মগুলি পরিষ্কারভাবে জিনিসগুলি মোড়ানো হয়নি; বাস্তবায়নগুলি PDP-11-এ ব্যবহৃত দুটি পরিপূরক পূর্ণসংখ্যার অবশ্যই অনুকরণ করার প্রয়োজনের পরিবর্তে, ভাষা পরিবর্তে স্বাক্ষরযুক্ত প্রকার যুক্ত করেছে যা বেশিরভাগ ক্ষেত্রে বীজগণিতের রিং হিসাবে আচরণ করতে হয়েছিল, এবং স্বাক্ষরযুক্ত পূর্ণসংখ্যার প্রকারগুলি অতিরিক্ত প্রবাহের ক্ষেত্রে অন্যান্য উপায়ে আচরণ করার অনুমতি দেয়।

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

uint32_t mul(uint16_t a, uint16_t b) { return a*b; }

(65535, 65535) এর সাথে সিস্টেমগুলির মধ্যে একটি সংজ্ঞায়িত আচরণ থাকবে যেখানে int16 বিট রয়েছে (অর্থাত্ 1 ফিরতি 1), যেখানে int33 বিট বা তার বেশি বিস্মৃত আচরণ (0xFFFE0001 প্রত্যাবর্তন করা হবে) এবং "ইনট" যে কোনও জায়গায় রয়েছে যেখানে অপরিজ্ঞাত আচরণ রয়েছে- মধ্যে [মনে রাখবেন জিসিসি হবে সাধারণত INT_MAX করেছেন + + 1U এবং UINT_MAX মধ্যে ফলাফল সঙ্গে arithmetically-সঠিক ফলাফল উত্পাদ, কিন্তু কখনও কখনও উপরের ফাংশন যা মান ব্যর্থ কোড জেনারেট করবে!]। খুব সহায়ক নয়।

তবুও, সংখ্যার মতো ধারাবাহিকভাবে বা নিয়মিত বীজগণিতের রিংয়ের মতো আচরণ করে এমন ধরণের অভাব কিছুটা প্রোগ্রামিংয়ের জন্য বীজগণিত রিংয়ের প্রকারগুলি প্রায় অপরিহার্য যে সত্যটি পরিবর্তন করে না।

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