স্বাক্ষরযুক্ত এবং স্বাক্ষরবিহীন সংখ্যা


17

মাইক্রোপ্রসেসরের ALU কীভাবে একটি স্বাক্ষরিত সংখ্যা -7, যে 1111 দ্বারা স্বাক্ষরিত এবং একটি স্বাক্ষরবিহীন 15 নম্বর, 1111 দ্বারা চিহ্নিত করা হয় তার মধ্যে পার্থক্য করতে পারে?


3
সম্পর্কিত প্রশ্নের উত্তর দেখুন: cs.stackexchange.com/a/30047/28999 । যাইহোক, স্বাক্ষরিত -7 1111 হিসাবে প্রতিনিধিত্ব করা হয় না That's এটি -1। তারপরে স্বাক্ষরিত এবং স্বাক্ষরযুক্ত উভয় ক্ষেত্রে (11-000 বনাম 14)
আলবার্ট হেন্ডরিক্স

2
@ অ্যালবার্টহেন্দ্রিকস ন্যায্যতার ক্ষেত্রে কিছু পুরানো কম্পিউটার একটি "সাইন-ম্যাগনিটিউটের উপস্থাপনা" (একটি সাইন বিট এবং ম্যাগনিটিউটের বিট) ব্যবহার করে এবং আমরা এখনও স্টাইলটি উদাহরণস্বরূপ আইইইই ফ্লোটের জন্য ব্যবহার করি। দু'জনের পরিপূরকের সাথে তুলনা করে তারা কেবল অদক্ষ এবং শক্ত কাজ। n1
ড্র্যাকোনিস

1
বৃহত্তর থ্যান / কম থ্যান অপারেটররা কীভাবে আচরণ করে এবং ডান-শিফট সর্বাধিক বিট পূরণ করে কিনা তার মধ্যে প্রধান পার্থক্য। আপনি যখন প্রকৃতপক্ষে গুণ এবং ভাগ করবেন তখন ফলাফলটি একই।
রব


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

উত্তর:


14

সংক্ষিপ্ত এবং সহজ উত্তর: এটি হয় না। কোনও আধুনিক মূলধারার সিপিইউ আইএসএ আপনার মনে হয় যেভাবে কাজ করে না।

সিপিইউর জন্য এটি কেবল কিছুটা প্যাটার্ন। এই বিট প্যাটার্নটির অর্থ কী তা ট্র্যাক করা আপনার কাছে প্রোগ্রামার, আপনার হাতে।

সাধারণভাবে, আইএসএগুলি স্টোরের ক্ষেত্রে আসে যখন বিভিন্ন ডেটা ধরণের মধ্যে পার্থক্য করে না। (কোনও এফপিইউতে ভাসমান রেজিস্টারগুলির মতো বিশেষ-উদ্দেশ্যে নিবন্ধগুলি উপেক্ষা করা)) এটি সিপিইউতে বিটের কেবল অর্থহীন নিদর্শন। যাইহোক, ISAs না নির্দেশাবলী বিভিন্ন উপায়ে বিট প্যাটার্ন ব্যাখ্যা করা হতে পারে বিভিন্ন ধরণের আছে। উদাহরণস্বরূপ, গাণিতিক নির্দেশাবলী যেমন MUL, DIV, ADD, SUBসংখ্যা কিছু যেমন বিট প্যাটার্ন, ব্যাখ্যা যেমন যৌক্তিক নির্দেশনা যেহেতু AND, OR, XORBooleans থেকে একটি অ্যারের যেমন ব্যাখ্যা। সুতরাং, সঠিক নির্দেশাবলী চয়ন করার জন্য এটি প্রোগ্রামার, (বা দোভাষী বা সংকলকটির লেখক যদি আপনি উচ্চ-স্তরের ভাষা ব্যবহার করেন) is

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

তবে নোট করুন যে আমি উপরে "আধুনিক মূলধারার আইএসএ" লিখেছি। বাস্তবে নন-মূলধারার বা historicতিহাসিক আইএসএগুলি ভিন্নভাবে কাজ করে। উদাহরণস্বরূপ, আইবিএম AS / 400 এর মূল 48-বিট সিআইএসসি আইএসএ পাশাপাশি সিস্টেমের বর্তমান পাওয়ার-ভিত্তিক 64-বিট আরআইএসসি আইএসএ এখন পয়েন্টার এবং অন্যান্য মানগুলির মধ্যে পার্থক্য করে। পয়েন্টারগুলিকে সর্বদা ট্যাগ করা হয় এবং এগুলির মধ্যে টাইপ করা তথ্য এবং অধিকার পরিচালনা অন্তর্ভুক্ত থাকে। সিপিইউ জানে যে মান একটি পয়েন্টার কিনা বা না, এবং কেবল অধিকারী আই / ওএস কার্নেলটি বিনা পয়েন্টারে প্যানেলগুলি নিখরচায় মঞ্জুরি দেয়। ব্যবহারকারী অ্যাপ্লিকেশনগুলি কেবলমাত্র স্বল্প সংখ্যক সুরক্ষিত নির্দেশাবলীর সাহায্যে নিজের মালিকের মেমরিটিতে নির্দেশ করতে পয়েন্টারগুলিকেই পরিচালনা করতে পারে।

কিছু historicতিহাসিক আইএসএ ডিজাইনও ছিল যা টাইপ-সচেতনতার কমপক্ষে কিছু সীমিত রূপ অন্তর্ভুক্ত করেছিল।


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

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

@Pseudonym: ওয়েল, টেকনিক্যালি, এটি নেই আছে charযা 16 বিট স্বাক্ষরবিহীন টাইপ হয়। অবশ্যই, জাভা বাইটকোডে এখনও স্বাক্ষরবিহীন পাটিগণিত নির্দেশাবলী নেই, যেহেতু কোনও charমানগুলি পাটিগণিতের জন্য স্বয়ংক্রিয়ভাবে int(32-বিট স্বাক্ষরিত) উন্নীত হয় ।
ইলমারি করোনেন

42

সংক্ষিপ্ত সংস্করণ: এটি জানেন না। বলার উপায় নেই।

যদি 1111-7 প্রতিনিধিত্ব করে তবে আপনার কাছে একটি সাইন-মাত্রার উপস্থাপনা থাকবে , যেখানে প্রথম বিটটি হ'ল সাইন এবং বাকী বিটগুলির দৈর্ঘ্য। এই ক্ষেত্রে, গাণিতিক কিছুটা জটিল, যেহেতু স্বাক্ষরবিহীন অ্যাড এবং একটি স্বাক্ষরযুক্ত অ্যাড বিভিন্ন যুক্তি ব্যবহার করে। সুতরাং আপনার সম্ভবত একটি SADDএবং একটি UADDঅপকোড থাকতে হবে এবং আপনি যদি ভুলটি চয়ন করেন তবে অযৌক্তিক ফলাফল পাবেন।

দু'জনের পরিপূরক প্রতিনিধিত্ব1111 বলা হয় এর মধ্যে প্রায়শই, -1 প্রতিনিধিত্ব করে । এই ক্ষেত্রে, সংখ্যাগুলি স্বাক্ষরিত বা স্বাক্ষরবিহীন থাকলে ALU কেবল যত্ন করে না! উদাহরণস্বরূপ, এর অপারেশন নেওয়া যাক 1110 + 0001। স্বাক্ষরিত গাণিতিক ক্ষেত্রে, এর অর্থ "-২ + 1", এবং ফলাফলটি -1 ( 1111) হওয়া উচিত । স্বাক্ষরবিহীন গাণিতিক ক্ষেত্রে, এর অর্থ "14 + 1", এবং ফলাফলটি 15 ( 1111) হওয়া উচিত । সুতরাং ALU জানে না যে আপনি স্বাক্ষরিত বা স্বাক্ষরবিহীন ফলাফল চান কিনা, এবং এটি যত্নশীল নয়। এটি কেবলমাত্র যোগটি যেমন স্বাক্ষরবিহীন ছিল তা করে এবং আপনি যদি পরে স্বাক্ষরকৃত পূর্ণসংখ্যা হিসাবে বিবেচনা করতে চান তবে এটি আপনার।

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

সম্পাদনা সম্পাদনা করুন: এর পরিপূরকের মতো আরও কিছু উপস্থাপনাও রয়েছে তবে এগুলি মূলত আর কখনও ব্যবহার করা হয় না তাই আপনাকে এগুলি নিয়ে উদ্বিগ্ন হওয়ার দরকার নেই।


আহ, গোছা। এর জন্য ধন্যবাদ :)
নূরভ

10
দুটির পরিপূরক উপস্থাপনে তিনটি গাণিতিক ক্রিয়াকলাপগুলি হ'ল সাইননেস-অজোনস্টিক: সংযোজন, বিয়োগফল এবং গুণন (অপারেন্ডগুলির সমান দৈর্ঘ্যের পণ্য সহ)। স্বাক্ষরিত অপারেশনগুলির জন্য কেবল বিভাগকে আলাদাভাবে পরিচালনা করতে হবে।
রুসলান

4
এছাড়া তুলনা আছে: < <= >= >বিভিন্ন বনাম যেহেতু স্বাক্ষরবিহীন operands স্বাক্ষরিত হয় ==এবং !=signedness অ্যাগনোস্টিক হয়।
ড্যানিয়েল শেপলার

গুণগুলি প্রায়শই স্বাক্ষরিত এবং স্বাক্ষরযুক্ত জাতগুলি: 0xFFFFFFFFF * 0xFFFFFFFF স্বাক্ষর না থাকলে 0xFFFFFFFFE00000001 এবং স্বাক্ষরিত হলে 0x00000000000000011 হয়। ইন্টেলের মতো প্রসেসরগুলি 2 টি রেজিস্টারে ফলাফল ফেরত দেয় এবং শীর্ষস্থানীয় রেজিস্টার স্বাক্ষরিত এবং স্বাক্ষরবিহীন স্বাক্ষরের জন্য পৃথক হয়। উভয় পরিস্থিতিতে নীচের নিবন্ধটি 1 is
রুডি ভেলথুইস

9

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

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

সিপিইউতে সাধারণত স্বাক্ষরযুক্ত বা স্বাক্ষরযুক্ত তুলনাগুলির জন্য আলাদা আলাদা নির্দেশনা থাকে। উদাহরণস্বরূপ, তুলনা স্বাক্ষর করা উচিত কিনা x86 এর CMPসাথে JL(কম হলে ঝাঁপ দাও) অনুসরণ করতে পারে, অথবা তুলনা স্বাক্ষরিত হওয়া উচিত JBকিনা (নীচে যদি লাফ করুন)। আবার, সংকলক বা প্রোগ্রামার তথ্য প্রকারের জন্য সঠিক নির্দেশিকা বেছে নেবে।

কিছু অন্যান্য নির্দেশাবলী প্রায়শই স্বাক্ষরিত এবং স্বাক্ষরযুক্ত বৈকল্পিকগুলিতে আসে যেমন ডান শিফট বা সাইন-এক্সটেনশনের সাথে বা ছাড়াই বিস্তৃত নিবন্ধে একটি মান লোড করা।


1
এমনকি স্বাক্ষরযুক্ত ও স্বাক্ষরিত (দু'জনের পরিপূরক) পূর্ণসংখ্যার জন্য গুণও একই, যতক্ষণ না ইনপুটগুলির চেয়ে বেশি বিট পাওয়ার জন্য আপনার ফলাফলের প্রয়োজন হয় না । আপনি যদি 8 × 8 → 16 বিট (বা 16 × 16 → 32 বিট, ইত্যাদি) এর গুণমানের মতো কিছু করছেন তবে আপনার ইনপুটগুলি (বা মধ্যবর্তী ফলাফল) প্রসারিত করতে সাইন ইন করতে হবে
ইলমারি করোনেন

@ ইলমারিকারোনেন এটি সত্য; এআরএম A32 / A64 নির্দেশ সেট সংখ্যাবৃদ্ধি নির্দেশ অনেক ফর্ম, সাইন-অজ্ঞেয়বাদী মাল্টিপ্লাই-অ্যাড যে শুধুমাত্র লোয়ার অর্ডার বিট লিখেছেন, কিন্তু সহ যে smulhএবং umulhশুধুমাত্র গুণ উপরের বিট এবং স্বাক্ষরিত ও স্বাক্ষরবিহীন নির্দেশাবলী আগমন যে উত্স অপারেশন হিসাবে দ্বিগুণ প্রশস্ত একটি রেজিস্টার ফলাফল প্রদান।
ডেভিস্লোর

6

এটা হয় না। প্রসেসর এটি কোন ধরণের ডেটা দেখছে এবং কোথায় এটি প্রেরণ করবে তা জানাতে নির্দেশিকা নির্দেশের উপর নির্ভর করে। অপারেন্ডে নিজেই 1s এবং 0 এর কিছুই নেই যা ডেটাটি চার, ফ্লোট, ইনট, স্বাক্ষরিত ইন্ট ইত্যাদি কিনা অন্তর্নিহিতভাবে ALU কে সিগন্যাল করতে পারে যে 1111 যদি একটি বৈদ্যুতিক সার্কিট যা 2s পরিপূরক প্রত্যাশা করে, যাচ্ছে 2s পরিপূরক হিসাবে ব্যাখ্যা করা।


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

3

আমি ইতিমধ্যে তৈরি উত্তরগুলিতে একটি সংযোজন দিতে চাই:

বেশিরভাগ অন্যান্য উত্তরে এটি লক্ষ করা যায় যে দ্বিগুণ পরিপূরক গাণিতিক ক্ষেত্রে ফলাফল স্বাক্ষরিত এবং স্বাক্ষরবিহীন সংখ্যার জন্য একই হয়:

-2 + 1 = -1     1110 + 0001 = 1111
14 + 1 = 15     1110 + 0001 = 1111

তবে ব্যতিক্রমগুলি রয়েছে:

Division:
  -2 / 2 = -1     1110 / 0010 = 1111
  14 / 2 = 7      1110 / 0010 = 0111
Comparison:
  -2 < 2 = TRUE   1110 < 0010 = TRUE
  14 < 2 = FALSE  1110 < 0010 = FALSE
"Typical" (*) multiplication:
  -2 * 2 = -4     1110 * 0010 = 11111100
  14 * 2 = 28     1110 * 0010 = 00011100

(*) অনেক সিপিইউতে দুটি এন-বিট সংখ্যার গুণনের ফলাফল (2 * n) বিট বিস্তৃত হয়।

এই জাতীয় ক্রিয়াকলাপের জন্য সিপিইউগুলির স্বাক্ষরিত এবং স্বাক্ষরবিহীন গাণিতিকগুলির জন্য পৃথক নির্দেশনা রয়েছে।

এর অর্থ প্রোগ্রামার (বা সংকলক) স্বাক্ষরযুক্ত এবং স্বাক্ষরবিহীন গাণিতিকগুলির জন্য অন্যান্য নির্দেশাবলী ব্যবহার করতে হবে।

উদাহরণস্বরূপ x86 সিপিইউতে divএকটি স্বাক্ষরবিহীন বিভাগ করার জন্য নামের একটি নির্দেশ এবং একটি নির্দেশনা রয়েছেidiv জন্য জন্য ।

স্বতন্ত্র এবং স্বাক্ষরযুক্ত স্বাক্ষরিত গাণিতিকগুলির জন্য পৃথক পৃথক "শর্তসাপেক্ষ" নির্দেশাবলী (শর্তাধীন জাম্প, সেট-বিট-অন-শর্ত) রয়েছে lic

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