স্বাক্ষরযুক্ত বনাম স্বাক্ষরিত পূর্ণসংখ্যাগুলি


395

আমি কি স্বাক্ষরিত এবং স্বাক্ষরবিহীন পূর্ণসংখ্যার মধ্যে পার্থক্যটি বলতে সঠিক:

  1. স্বাক্ষরবিহীন একটি বৃহত্তর ধনাত্মক মান এবং কোনও নেতিবাচক মান রাখতে পারে।
  2. স্বাক্ষরযুক্ত সংস্করণটি নম্বরটি ইতিবাচক বা negativeণাত্মক কিনা তা সনাক্ত করতে বাম-সর্বাধিক-বিট ব্যবহার করে, স্বাক্ষরিত সংস্করণটি মানটির অংশ হিসাবে অগ্রণী বিট ব্যবহার করে।
  3. স্বাক্ষরিত পূর্ণসংখ্যাগুলি ধনাত্মক এবং negativeণাত্মক উভয় সংখ্যা রাখতে পারে।

অন্য কোন পার্থক্য?


6
যেহেতু 0 টি ইতিবাচক বা নেতিবাচক নয় , স্বাক্ষরযুক্ত পূর্ণসংখ্যার জন্য ধনাত্মক মানের পরিবর্তে অ-নেতিবাচক মান শব্দটি ব্যবহার করা আরও উপযুক্ত ।
ড্যানিয়েল

উত্তর:


344

স্বাক্ষরবিহীন একটি বৃহত্তর ধনাত্মক মান এবং কোনও নেতিবাচক মান রাখতে পারে।

হ্যাঁ.

স্বাক্ষরযুক্ত সংস্করণটি নম্বরটি ইতিবাচক বা negativeণাত্মক কিনা তা সনাক্ত করতে বাম-সর্বাধিক-বিট ব্যবহার করে, স্বাক্ষরিত সংস্করণটি মানটির অংশ হিসাবে অগ্রণী বিট ব্যবহার করে।

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

স্বাক্ষরিত পূর্ণসংখ্যাগুলি ধনাত্মক এবং negativeণাত্মক উভয় সংখ্যা রাখতে পারে।

হ্যাঁ


আমি নিশ্চিত নই যে এটি ঠিক সেই পাঠ্য কিনা তবে আমি অন্য লিঙ্কটি পেয়েছি। পিডিএফের নবম পৃষ্ঠায় যান (এটি আসলে বইয়ের 38 তম পৃষ্ঠা) এবং আপনি ডেটা প্রতিনিধিত্ব (বিভাগ 1.3) নামক বিভাগটি দেখতে পারেন। উপরে বর্ণিত সমস্ত বিষয়গুলির এটির ব্যাখ্যা রয়েছে। lms.uop.edu.jo/lms/pluginfile.php/2420/mod_resource/content/1/…
অদ্ভুতএফবি 0

92

আমি x86 এ হার্ডওয়্যার স্তরে পার্থক্যের মধ্যে যাব। আপনি সাধারণত কোনও সংকলক লিখছেন না বা সমাবেশের ভাষা ব্যবহার না করে এটি বেশিরভাগ ক্ষেত্রেই অপ্রাসঙ্গিক। তবে এটা জেনে ভালো লাগল।

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

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

প্রথমত, দু'জনের পরিপূরক সংখ্যার এমন সম্পত্তি রয়েছে যা স্বাক্ষরযুক্ত সংখ্যাগুলির মতো সংযোজন এবং বিয়োগফলের সমান। সংখ্যাগুলি ধনাত্মক বা negativeণাত্মক কিনা তা কোনও পার্থক্য করে না। (সুতরাং আপনি কেবল এগিয়ে যান ADDএবং SUBআপনার সংখ্যা উদ্বেগ ছাড়াই।)

তুলনা করার সময় পার্থক্যগুলি দেখাতে শুরু করে। x86 এর পার্থক্য করার একটি সহজ উপায় রয়েছে: উপরে / নীচে স্বাক্ষরযুক্ত তুলনা এবং তার চেয়ে বড় / কম একটি স্বাক্ষরিত তুলনা নির্দেশ করে indicates (যেমন JAE"উপরে বা সমান হলে লাফ দিন" এবং স্বাক্ষরবিহীন))

স্বাক্ষরিত এবং স্বাক্ষরযুক্ত স্বাক্ষর পূর্ণসংখ্যার সাথে কাজ করার জন্য দুটি গুণ এবং বিভাগ নির্দেশাবলীও রয়েছে।

শেষ অবধি: যদি আপনি পরীক্ষা করতে চান, বলুন, ওভারফ্লো, আপনি স্বাক্ষরযুক্ত এবং স্বাক্ষরযুক্ত সংখ্যাগুলির জন্য এটি আলাদাভাবে করবেন ly


স্বাক্ষরযুক্ত ও স্বাক্ষরযুক্ত সংখ্যার দ্বারা আপনি কী বোঝাতে চেয়েছেন, আমি যদি জিজ্ঞাসা করতে চাই তা যদি আমি স্বাক্ষরবিহীন কোনও a = 2 এবং স্বাক্ষরিত খ b = 2 লিখি তবে তারা স্বাক্ষরিত বা স্বাক্ষরযুক্ত উভয়ই, কোনও সংখ্যায় স্বাক্ষরিত বা স্বাক্ষরবিহীন এই টাইপের উপর নির্ভর করে আমরা এটি নির্ধারণ করি, বা এটির নেতিবাচক চিহ্ন আছে কিনা তার উপর নির্ভর করে? এই অল্প সময়ের জন্য আমাকে bugging করা হয়েছে.
সুরজ জৈন

@ সুরজজাইন স্বাক্ষরিত এবং স্বাক্ষরযুক্ত প্রকারগুলি সম্পর্কে উল্লেখ করুন। তারা উল্লেখ করে যে কোনও পরিবর্তনশীল বা ভাবের পক্ষে নেতিবাচক মান পাওয়া সম্ভব কিনা ।
আর্টেলিয়াস

আমার নিম্নলিখিত সন্দেহ আছে, আমি প্রশ্নটি জিজ্ঞাসা করেছি, এখনও সন্তোষজনক উত্তর নেই, এটি এখানে একবার দেখুন, স্ট্যাকওভারফ্লো ::
সুরজ জৈন

62

তিনি কেবল স্বাক্ষরিত এবং স্বাক্ষরবিহীন সম্পর্কে জিজ্ঞাসা করেছিলেন। কেন লোকেরা এতে অতিরিক্ত জিনিস যুক্ত করছে তা জানেন না। উত্তর আমি আপনাকে বলি।

  1. স্বাক্ষরযুক্ত: এটিতে কেবল অ-নেতিবাচক মানগুলি থাকে যেমন 0 থেকে 255।

  2. স্বাক্ষরিত: এটি উভয় নেতিবাচক এবং ধনাত্মক মান নিয়ে গঠিত তবে বিভিন্ন ফর্ম্যাটের মতো

    • 0 থেকে +127
    • -1 থেকে -128

এবং এই ব্যাখ্যাটি 8 বিট নম্বর সিস্টেম সম্পর্কে।


17

সম্পূর্ণতার জন্য কয়েকটি পয়েন্ট:

  • এই উত্তরটি কেবল পূর্ণসংখ্যা উপস্থাপনা নিয়ে আলোচনা করছে। ভাসমান পয়েন্টের জন্য অন্যান্য উত্তর থাকতে পারে;

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

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

  • কারও পরিপূরক বা স্বাক্ষরিত পরিমাণটি ব্যবহার করার সময় আপনি শূন্যকে ধনাত্মক বা নেতিবাচক সংখ্যা হিসাবে উপস্থাপন করতে পারেন (যা এই উপস্থাপনাগুলি সাধারণত ব্যবহৃত হয় না এমন কয়েকটি কারণের মধ্যে একটি)।


আমি যদি স্বাক্ষরযুক্ত স্বাক্ষরিত a = -2 এবং স্বাক্ষরিত খ b = -2 লিখি তবে অন্তর্নিহিত উপস্থাপনাটি কি একইভাবে লিখতে হবে, আমি জানি যে স্বাক্ষরযুক্ত নম্বরটি একটি নেতিবাচক মান দেওয়া ভাল না, তবে এখনও যদি আমি এটি দিয়ে থাকি তবে কী হবে অন্তর্নিহিত প্রতিনিধিত্ব?
সুরজ জৈন

1
গৌণ নিগল: আইইইইই ভাসমান পয়েন্টে সাইন এবং প্রস্থতা ব্যবহৃত হয়, সুতরাং এটি আসলে বেশ সাধারণ। :-)
এ্যালাস্টার

14

আমরা শ্রেণিতে যা শিখেছি সে অনুসারে, স্বাক্ষরিত পূর্ণসংখ্যাগুলি ধনাত্মক এবং negativeণাত্মক উভয় সংখ্যক প্রতিনিধিত্ব করতে পারে , অন্যদিকে স্বাক্ষরযুক্ত পূর্ণসংখ্যাগুলি কেবল অ-নেতিবাচক হয়।

উদাহরণস্বরূপ, একটি 8-বিট সংখ্যাটি দেখছেন :

স্বাক্ষরবিহীন মান 0থেকে255

স্বাক্ষরিত মানগুলি থেকে শুরু -128করে127


11

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


এটি কি ছোট-এন্ডিয়ান এবং বিগ-এন্ডিয়ান জিনিস?
vIceBerg

ছোট বনাম বিগ এন্ডিয়ান এর প্ল্যাটফর্মের বাইটের ক্রমটি করতে হবে। লিটল এন্ডিয়ান 0xFF 0xFE 0x7F করতে পারে তবে বড় এন্ডিয়ান 0x7F 0xFE 0xFF করতে পারে।
জ্যাস্পার বেকার্স

10

আরেকটি পার্থক্য হ'ল আপনি যখন বিভিন্ন আকারের পূর্ণসংখ্যার মধ্যে রূপান্তর করছেন।

উদাহরণস্বরূপ, আপনি যদি স্বাক্ষরবিহীন মান সহ কোনও বাইট স্ট্রিম (সরলতার জন্য 16 বিট বলুন) থেকে কোনও পূর্ণসংখ্যা বের করছেন, আপনি এটি করতে পারেন:

i = ((int) b[j]) << 8 | b[j+1]

(সম্ভবত 2 ডি বাইট কাস্ট করা উচিত , তবে আমি অনুমান করছি যে সংকলকটি সঠিক কাজ করবে)

স্বাক্ষরিত মানগুলির সাথে আপনাকে সাইন এক্সটেনশান সম্পর্কে চিন্তা করতে হবে এবং করতে হবে:

i = (((int) b[i]) & 0xFF) << 8 | ((int) b[i+1]) & 0xFF

5

সাধারণত এটি সঠিক। আপনি কেন পার্থক্যগুলি সন্ধান করছেন সে সম্পর্কে আরও কিছু না জেনে আমি স্বাক্ষরিত এবং স্বাক্ষরযুক্ত কোনও অন্য পার্থক্যকারী সম্পর্কে ভাবতে পারি না।


4

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


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

4
  1. হ্যাঁ, স্বাক্ষরবিহীন পূর্ণসংখ্যা বড় মূল্য সঞ্চয় করতে পারে।
  2. না, ইতিবাচক এবং নেতিবাচক মানগুলি দেখানোর বিভিন্ন উপায় রয়েছে।
  3. হ্যাঁ, স্বাক্ষরিত পূর্ণসংখ্যায় ইতিবাচক এবং নেতিবাচক উভয় মান থাকতে পারে।

4

(দ্বিতীয় প্রশ্নের উত্তরে) শুধুমাত্র একটি সাইন বিট ব্যবহার করে (এবং 2 এর পরিপূরক নয়), আপনি -0 দিয়ে শেষ করতে পারেন। খুব সুন্দর না।


কেবলমাত্র এই উত্তরে যুক্ত করার জন্য, মূলত এর অর্থ হ'ল 10 == 00 যেখানে এই দুটি সংখ্যাই বেস 2

4

সি তে স্বাক্ষরিত পূর্ণসংখ্যার সংখ্যা উপস্থাপন করে। যদি aএবং bস্বাক্ষরিত পূর্ণসংখ্যার ধরণের পরিবর্তক হয় তবে স্ট্যান্ডার্ডটির জন্য কখনই কোনও সংকলককে তাদের নিজ নিজ মানগুলির পাটিগণিত যোগ ছাড়া অন্য কোনও কিছুতে অভিব্যক্তি a+=bসঞ্চয় করার প্রয়োজন হয় না a। যদি গাণিতিক সমষ্টি মধ্যে মাপসই করা হবে না এটা ঠিক যে, a, প্রসেসর পারে এটিকে সেখানে রাখা করতে সক্ষম নাও হতে কিন্তু মান আরোপ করার কম্পাইলার প্রয়োজন হয় না হবে বা মূল্য মোড়ানো, অথবা মান যে অতিক্রম করে যে বিষয়টি জন্য অন্য কিছু করতে তাদের ধরণের সীমাবদ্ধতা। মনে রাখবেন যে স্ট্যান্ডার্ডটির এটির প্রয়োজন নেই, সি প্রয়োগকারীদের স্বাক্ষরিত মান সহ পাটিগণিতের ওভারফ্লোগুলিকে ফাঁদে ফেলার অনুমতি দেওয়া হয়েছে।

সি-তে স্বাক্ষরযুক্ত পূর্ণসংখ্যাগুলি পূর্ণসংখ্যার বিমূর্ত বীজগণিত রিং হিসাবে আচরণ করে যা বৃহত্তর প্রকারের রূপান্তর বা সংক্রমণের সাথে পরিচালিত পরিস্থিতিতে ব্যতীত দু'জনের কিছুটা একত্রিত করে মডুলু হয় some যে কোনও আকারের পূর্ণসংখ্যাকে 32-বিট স্বাক্ষরবিহীন প্রকারে রূপান্তরিত করা হলে সেই সদস্যটির সাথে সম্পর্কিত জিনিসগুলি পাওয়া যাবে যা সেই পূর্ণসংখ্যা মোড 4,294,967,296 এর সাথে সংগতিপূর্ণ। 2 টি ফলন থেকে 4,294,967,295 থেকে 3 বিয়োগ করার কারণটি হ'ল একত্রিত কিছুতে 3 এর সাথে কিছু সংযোজন 4,294,967,295 তে কিছু মিলিয়ে 2 তে কিছু মিলবে।

অ্যাবস্ট্রাক্ট বীজগণিতের রিংগুলির ধরণগুলি প্রায়শই সহজ জিনিসগুলি হ'ল; দুর্ভাগ্যক্রমে, সি কোনও ধরণের রিং হিসাবে আচরণ করা উচিত কিনা তা সিদ্ধান্ত নেওয়ার ফ্যাক্টর হিসাবে স্বাক্ষর ব্যবহার করে। সবচেয়ে খারাপ, স্বাক্ষরযুক্ত মানগুলি বড় আকারে রূপান্তরিত হওয়ার সময় রিং সদস্যের চেয়ে সংখ্যা হিসাবে বিবেচিত হয় এবং intযখন কোনও গাণিতিক সম্পাদিত হয় তখন সংখ্যায় রূপান্তরিত হওয়ার চেয়ে স্বাক্ষরবিহীন মানগুলি ছোট হয়। যদি vএকটি uint32_tসমান হয় 4,294,967,294, তাহলে করা v*=v;উচিত v=4। দুর্ভাগ্যক্রমে, যদি int64 বিট হয়, তবে কী v*=v;করতে পারে তা বলার অপেক্ষা রাখে না।

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


3

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

unsigned int ui = -1;
signed int si = -1;

if (ui < 0) {
    printf("unsigned < 0\n");
}
if (si < 0) {
    printf("signed < 0\n");
}
if (ui == si) {
    printf("%d == %d\n", ui, si);
    printf("%ud == %ud\n", ui, si);
}

যখন আপনি এটি চালান, আপনি উভয় মান -1 নির্ধারিত হয়েছিলেন এবং আলাদাভাবে ঘোষিত হলেও আপনি নিম্নলিখিত আউটপুটটি পাবেন।

signed < 0
-1 == -1
4294967295d == 4294967295d

0

সি তে স্বাক্ষরিত এবং স্বাক্ষরিত স্বাক্ষরিত মানের মধ্যে একমাত্র গ্যারান্টিযুক্ত পার্থক্য হ'ল স্বাক্ষরিত মানটি নেতিবাচক, 0 বা ধনাত্মক হতে পারে, অন্যদিকে স্বাক্ষরযুক্ত মানটি কেবল 0 বা ধনাত্মক হতে পারে। সমস্যাটি হ'ল সি প্রকারের বিন্যাসটি সংজ্ঞায়িত করে না (তাই আপনি জানেন না যে আপনার পূর্ণসংখ্যা দুটি এর পরিপূরক হিসাবে রয়েছে)। আপনি উল্লেখ করেছেন প্রথম দুটি বিষয় কঠোরভাবে বলতে গেলে ভুল।


0

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

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