স্বাক্ষরযুক্ত সংখ্যার জন্য সাইন-ও-ডিগ্রিটির চেয়ে দু'জনের পরিপূরককে কেন পছন্দ করবেন?


201

বাইনারি -1 উপস্থাপনের জন্য যদি এর কোনও কারণ থাকে তবে আমি কেবল কৌতূহলী, দুটিটির পরিপূরক ব্যবহার করা হয়েছে: বিটগুলি উল্টানো এবং 1 যুক্ত করা?

-1 11111111 (দুজনের পরিপূরক) এর পরিবর্তে (আমার কাছে আরও স্বজ্ঞাগত) দ্বারা প্রতিনিধিত্ব করা হয়েছে 10000001 যা বাইনারি 1 যা প্রথম বিট নেতিবাচক পতাকা হিসাবে রয়েছে।

দাবি অস্বীকার: আমি আমার কাজের জন্য বাইনারি গাণিতিকের উপর নির্ভর করি না!


6
এফডাব্লুআইডাব্লু, সাইন-বিট ব্যবহারের আপনার "স্বজ্ঞাত" পদ্ধতিটি আন্তরিকভাবে ব্যবহৃত হয় - উদাহরণস্বরূপ, বেশিরভাগ কম্পিউটারগুলি ভাসমান পয়েন্ট সংখ্যা উপস্থাপন করার সময় একটি সাইন-বিট ব্যবহার করে।
আদিসাক

2
@ অ্যাডিসাককে এটিকে স্বাক্ষরিত মাত্রা বলা হয়
কোল জনসন

2
আমি সর্বদা পূর্ণসংখ্যার সাথে সাইন-ও-গৌন প্রতিনিধিত্বের সাথে যুক্ত করেছি যেহেতু ভাসমান পয়েন্ট সংখ্যায় তিনটি উপাদান থাকে: একটি চিহ্ন, একটি ক্ষতিকারক এবং একটি ম্যান্টিসা (প্রায়শই অন্তর্ভুক্ত '1' দিয়ে থাকে)। তবে আমি অনুমান করি যে যতক্ষণ না তারা বুঝতে পারে যে তারা কঠোরভাবে রৈখিক নয় ততক্ষণ বেদী এবং ম্যান্টিসার সাথে তার পরিধি হিসাবে চিকিত্সা করা যথেষ্ট সহজ।
আদিসাক

যারা @ অ্যাডিসাকের মন্তব্য সম্পর্কে আগ্রহী তাদের জন্য ভাসমান-পয়েন্ট নম্বরগুলি বাইনারিতে কীভাবে সংরক্ষণ করা হয় সে সম্পর্কে এখানে একটি নিবন্ধ আলোচনা করা হয়েছে।
জিডিপি 2

শুধু একটা চমৎকার ভিডিওটি এই ব্যাখ্যা দেখেছি youtube.com/watch?v=dHB7jFjESLY
allenlinli

উত্তর:


333

এটি সম্পন্ন করা হয়েছে যাতে সংখ্যার সাথে নেতিবাচক সংখ্যার জন্য কোনও যুক্তিযুক্ত হওয়া প্রয়োজন না। উইকিপিডিয়ায় নিবন্ধটি দেখুন ।

বলুন আপনার দুটি নম্বর আছে, 2 এবং -1। সংখ্যার উপস্থাপনের আপনার "স্বজ্ঞাত" পদ্ধতিতে, তারা যথাক্রমে হবে 0010এবং 1001(আমি আকারের জন্য 4 বিটকে আঁকছি)। ইন দুই এর সম্পূরক পথ, তারা 0010এবং 1111। এখন, ধরুন আমি তাদের যুক্ত করতে চাই।

টু এর পরিপূরক সংযোজন খুব সহজ। আপনি সাধারণত সংখ্যা যুক্ত করেন এবং শেষে যে কোনও বাহন বিট বাতিল করা হয়। সুতরাং সেগুলি নিম্নলিখিত হিসাবে যুক্ত করা হয়েছে:

  0010
+ 1111
=10001
= 0001 (discard the carry)

0001 1, যা "2 + (- 1)" এর প্রত্যাশিত ফলাফল।

তবে আপনার "স্বজ্ঞাত" পদ্ধতিতে যুক্ত করা আরও জটিল:

  0010
+ 1001
= 1011

কোনটি -3, তাই না? সাধারণ সংযোজন এই ক্ষেত্রে কাজ করে না। আপনাকে লক্ষ্য রাখতে হবে যে একটি সংখ্যাটি negativeণাত্মক এবং যদি এরকম হয় তবে ভিন্ন অ্যালগরিদম ব্যবহার করুন।

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

অতিরিক্তভাবে, "স্বজ্ঞাত" স্টোরেজ পদ্ধতিতে দুটি শূন্য রয়েছে:

0000  "zero"
1000  "negative zero"

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

এইভাবে ইনটস সংরক্ষণের সাথে আরও একটি বোনাস রয়েছে এবং এটি যখন আপনার রেজিস্টারের প্রস্থের প্রসারিত করতে হবে তখন মানটি সংরক্ষণ করা হয় two সবচেয়ে উল্লেখযোগ্য বিট:

    0001 (one, in four bits)
00000001 (one, in eight bits)
    1110 (negative two, in four bits)
11111110 (negative two, in eight bits)

এটি ছোট শব্দের সাইন বিটটি দেখার এবং এটি বড় শব্দের প্রস্থকে প্যাড না করা পর্যন্ত পুনরাবৃত্তি করার বিষয়।

আপনার পদ্ধতির সাথে আপনাকে বিদ্যমান বিটটি সাফ করতে হবে যা প্যাডিংয়ের পাশাপাশি অতিরিক্ত ক্রিয়াকলাপ:

    0001 (one, in four bits)
00000001 (one, in eight bits)
    1010 (negative two, in four bits)
10000010 (negative two, in eight bits)

আপনার এখনও উভয় ক্ষেত্রে সেই অতিরিক্ত 4 টি বিট সেট করতে হবে, তবে "স্বজ্ঞাত" ক্ষেত্রে আপনাকে 5 তম বিটটিও সাফ করতে হবে। এটি প্রতিটি প্রয়োগে উপস্থিত একটি অন্যতম মৌলিক এবং সাধারণ ক্রিয়াকলাপের একটি ছোট অতিরিক্ত পদক্ষেপ।


13
আমি রাজী. 2 এর পরিপূরক কাজ করে। তবে আমরা কীভাবে এটি প্রথম স্থানে পৌঁছেছি? ধরুন আমার যদি এই স্বরলিপিটি পৌঁছানোর দরকার হয় তবে চিন্তা প্রক্রিয়াটি কী হবে। আমার মনে হয় 2 এর পরিপূরক এ পৌঁছনো ভাগ্যের চেয়ে আরও বেশি কিছু হওয়া উচিত, তাই না?
লেজার

1
এছাড়াও, কেন ভাসমানদের জন্য কোনও 2 এর পরিপূরক সমকক্ষ নেই?
লেজার

6
@ লেজার এই নিবন্ধটি দেখুন how we arrived at 2s compliment the first place. cs.cornell.edu/~tomf/notes/cps104/twoscomp.html
অঙ্কিত

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

3
@ সুরজ, আমি পুরো উত্তরটির জন্য দুটি এর পরিপূরক সম্পর্কিত উইকিপিডিয়া নিবন্ধটি দেখার পরামর্শ দিই: en.wikedia.org/wiki/Two%27s_complement । সংক্ষিপ্ত উত্তর MSB হয় 1ইঙ্গিত -8এবং অবশিষ্ট তিনটি 1গুলি ইঙ্গিত 4, 2এবং 1যথাক্রমে তাই হয়, -8+4+2+1 = -1
ওয়েলবোগ

18

উইকিপিডিয়া সব বলে:

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

অন্য কথায়, সংযোজনটি হ'ল একই, তবে সংখ্যাটি নেতিবাচক নয়।


স্যার, আমি যদি চর লিখি = 12; এবং স্বাক্ষরবিহীন চর বি = 12, অন্তর্নিহিত বিট প্যাটার একই, আসলে কী ঘটে?
সুরজ জৈন

লেখালেখি বা পড়ার সময় কিছুই পরিবর্তন হয় না। সংযোজন বা বিয়োগফল কেবল তখনই প্রযোজ্য।
টেলসপিন_কিট

12

যদিও এই প্রশ্নটি পুরানো, আমাকে আমার 2 সেন্ট লাগিয়ে দিন।

আমি এটি ব্যাখ্যা করার আগে আসল মূল বিষয়গুলিতে ফিরে আসি। 2 'পরিপূরক 1 এর পরিপূরক + 1। এখন 1 এর পরিপূরক কী এবং এর তাত্পর্য ছাড়াও কী।

যে কোনও এন-বিট সংখ্যার যোগফল এবং এর 1 এর পরিপূরক আপনাকে সর্বাধিক সম্ভাব্য সংখ্যা দেয় যা সেই এন-বিট দ্বারা প্রতিনিধিত্ব করা যায়। উদাহরণ:

 0010 (2 in 4 bit system)
+1101 (1's complement of 2)
___________________________
 1111  (the highest number that we can represent by 4 bits)

এখন আমরা ফলাফলটিতে আরও 1 টি যুক্ত করার চেষ্টা করলে কী হবে। এটি একটি ওভারফ্লোতে ফলাফল করবে।

ফলাফলটি হবে 1 0000যা 0 (যেমন আমরা 4 বিট সংখ্যা নিয়ে কাজ করছি, (বাম দিকে 1 টি একটি উপচে পড়া))

সুতরাং,

Any n-bit number + its 1's complement = max n-bit number
Any n-bit number + its 1'complement + 1 = 0 ( as explained above, overflow will occur as we are adding 1 to max n-bit number)

এরপরে কেউ 1 এর পরিপূরক + 1 কে 2'কমপ্লিট হিসাবে কল করার সিদ্ধান্ত নিয়েছে। সুতরাং উপরের বিবৃতিটি পরিণত হয়: যে কোনও এন'বিট সংখ্যা + এর 2 এর পরিপূরক = 0 যার অর্থ 2 এর সংখ্যার পরিপূরক = - (সেই সংখ্যার)

এই সমস্ত আরও একটি প্রশ্ন জাগায়, কেন আমরা ইতিবাচক সংখ্যার প্রতিনিধিত্ব করতে এন বিটগুলির কেবলমাত্র (এন -1) ব্যবহার করতে পারি এবং বাম দিকের বেশিরভাগ নবম বিট কেন চিহ্নটি উপস্থাপন করে (0 বামদিকের বিটের মানে + Ve সংখ্যা, এবং 1) -মান সংখ্যা)। উদাহরণস্বরূপ, 32 তম বিটটি 1, এর একটি-সংখ্যা হিসাবে যদি আমরা ইতিবাচক সংখ্যাকে উপস্থাপন করতে জাভাতে কোন int এর প্রথম 31 টি বিট ব্যবহার করি?

 1100 (lets assume 12 in 4 bit system)
+0100(2's complement of 12)
___________________________

1 0000 (ফলাফল শূন্য, বহনকারী 1 বহমান সহ)

সুতরাং (এন + 2'কমপ্লিমেন্ট এন) = 0 এর সিস্টেমটি এখনও কাজ করে। এখানে একমাত্র অস্পষ্টতা 12 এর 2 এর পরিপূরক হয় 0100 যা অস্পষ্টভাবে +8 প্রতিনিধিত্ব করে, 2s পরিপূরক সিস্টেমে -12 প্রতিনিধিত্ব করা ব্যতীত।

ইতিবাচক সংখ্যার সর্বদা বামে কিছুটা 0 থাকে তবে এই সমস্যাটি সমাধান হবে। সেক্ষেত্রে তাদের 2 এর পরিপূরকটি সর্বদা তাদের বাম দিকের বিটটিতে 1 টি থাকবে এবং আমরা 2 এর পরিপূরক সংখ্যার পাশাপাশি একটি + ভের সংখ্যাটি উপস্থাপন করে একই সেট বিটগুলির অস্পষ্টতা পাব না।


1
+ + 1'ed। এটি তথ্য ছিল, তবে শেষ পর্যন্ত আমি নিশ্চিত নই যে আপনি কেন এটি ইতিবাচক বা নেতিবাচক সংখ্যা কিনা তা উপস্থাপনের জন্য উল্লেখযোগ্য বিটের পদ্ধতির কাছে কেন চেয়েছিলেন। এটিতে 0 এর 2 টি উপস্থাপনা - 000 (+) এবং 1000 (-) থাকবে এমন অনেকগুলি ইস্যু রয়েছে .. এছাড়াও একই অ্যালগোরিদম ব্যবহার করে সংযোজন এবং বিয়োগফল করা যাবে না। আপনি যখন সাধারণ 0100 বলছেন তখন এটি +8 হয় এবং আপনি যখন দুটি এর পরিপূরক 0100 বলেন তখন তা -12 ..
হাগারওয়াল

8

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


6

এটি সংখ্যার পরিমাণগুলি এবং পার্থক্যকে সরল করে তোলা। 'sণাত্মক সংখ্যার যোগফল এবং 2 এর পরিপূরকগুলিতে কোডিত একটি ধনাত্মক একটি সাধারণ উপায়ে তাদের যোগফল হিসাবে সমান।


5

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

8-বিট মান গ্রহণ একটি 7 একটি 6 একটি 5 একটি 4 একটি 3 একটি 2 একটি 1 একটি 0

সাধারণ স্বাক্ষরযুক্ত বাইনারি ব্যাখ্যা:
2 7 * a 7 + 2 6 * a 6 + 2 5 * a 5 + 2 4 * a 4 + 2 3 * a 3 + 2 2 * একটি 2 + 2 1 * এ 1 + 2 0 * একটি 0
11111111 = 128 + + 64 + + 32 + + 16 + 8 থেকে +4 +2 + 1 টি = 255

দুটির পরিপূরক ব্যাখ্যার অর্থ:
-2 7 * a 7 + 2 6 * a 6 + 2 5 * a 5 + 2 4 * a 4 + 2 3 * a 3 + 2 2 * a 2 + 2 1 * a 1 + 2 0 * a 0
11111111 = -128 + + 64 + + 32 + + 16 + 8 থেকে +4 +2 + 1 টি = -1

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


4

টু এর পরিপূরক কোনও বিশেষ যুক্তি ছাড়াই নেতিবাচক এবং ধনাত্মক সংখ্যাগুলি একসাথে যুক্ত করার অনুমতি দেয়।

যদি আপনি নিজের পদ্ধতিটি
10000001 (-1)
+00000001 (1) ব্যবহার করে 1 এবং -1 যুক্ত করার চেষ্টা করেন তবে
আপনি
10000010 (-2) পান

পরিবর্তে, দুটি এর পরিপূরক ব্যবহার করে, আমরা যুক্ত করতে পারি

11111111 (-1)
+00000001 (1) আপনি পাবেন
00000000 (0)

বিয়োগের ক্ষেত্রেও একই কথা।

এছাড়াও, আপনি যদি 6 থেকে 4 টি বিয়োগ করার চেষ্টা করেন (দুটি ধনাত্মক সংখ্যা) আপনি 2 এর পরিপূরক 4 করতে পারেন এবং দুটি একসাথে 6 + (-4) = 6 - 4 = 2 যোগ করতে পারেন

এর অর্থ হল যে উভয় ধনাত্মক এবং negativeণাত্মক সংখ্যার বিয়োগ এবং সংযোজন সমস্ত সিপিইউতে একই সার্কিট দ্বারা করা যেতে পারে।


4

অন্যের উত্তরগুলি প্রসারিত করতে:

দু'জনের পরিপূরক

  • যোগ করা একই প্লেইন পজিটিভ ইন্টিজার যুক্ত প্রক্রিয়া।
  • বিয়োগ খুব বেশি পরিবর্তন হয় না
  • গুণও!

বিভাগের জন্য আলাদা পদ্ধতি দরকার।

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


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

@ ল্যুভেনফ্যাক: প্রস্থের সংখ্যাবৃদ্ধি সাধারণত একই রকম হবে তবে স্বাক্ষরিত এবং স্বাক্ষরবিহীন বহুগুণের ফলাফলগুলি কেবল একই রকমের গ্যারান্টিযুক্ত যদি ফলাফলটি স্বাক্ষরিত ইন্টার এর পরিসরে ফিট করে। কিছু সংকলক জিসিসির মতো, কিছু দেওয়া unsigned mul(unsigned short x, unsigned short y) { return x*y; }[16-বিট সংক্ষিপ্ত; 32 বিট int- এ] মাঝে মাঝে কোডটি ইচ্ছা ঠিকঠাক উত্পন্ন করবে যদি পণ্য তুলনায় 2147483647. বড়
supercat

2

এই প্রশ্নের উত্তরগুলি পড়ে, আমি এই মন্তব্যটি [সম্পাদিত] জুড়ে এসেছি।

2 এর পরিপূরক 0100 (4) হবে 1100. আমি যদি সাধারণভাবে বলি তবে এখন 1100 হয়। সুতরাং, যখন আমি সাধারণ 1100 বলি তখন এটি 12 হয়, তবে আমি যখন 2 এর পরিপূরক 1100 বলি তখন এটি -4 হয়? এছাড়াও, জাভাতে যখন 1100 (এখনকার জন্য 4 টি বিট ধরে নেওয়া যায়) সংরক্ষণ করা হয় তবে এটি +12 বা -4 হয় কীভাবে নির্ধারিত হয়? - জুলাই 2 জুলাই 16:53 এ

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

প্রশ্ন - এক বা একাধিক সংলগ্ন বাইটকে ব্যাখ্যা করার পদ্ধতি কীভাবে সিস্টেমটি প্রতিষ্ঠা করতে পারে? বিশেষত, সিস্টেমটি কীভাবে প্রতিষ্ঠিত করতে পারে যে প্রদত্ত বাইটের ক্রমটি একটি সরল বাইনারি সংখ্যা বা 2 এর পরিপূরক সংখ্যা কিনা?

উত্তর - সিস্টেম প্রকারভেদ করে কীভাবে বাইটের ক্রমটি ব্যাখ্যা করতে পারে তা প্রতিষ্ঠিত করে। প্রকারগুলি সংজ্ঞায়িত করে

  • কত বাইট বিবেচনা করতে হবে
  • কীভাবে সেই বাইটগুলি ব্যাখ্যা করতে হবে

উদাহরণ - নীচে আমরা ধরে নিই যে এটি

  • charএর 1 বাইট দীর্ঘ
  • shortএর দৈর্ঘ্য 2 বাইট
  • intএর এবং floatএর গুলি 4 বাইট দীর্ঘ

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

সবার আগে আমরা 4 বাইট সমন্বিত একটি অ্যারে সংজ্ঞায়িত করি 10111101এবং হেক্সাডেসিমাল সংখ্যার সাথে বাইনারি সংখ্যার সাথে তাদের সমস্তটি আরম্ভ করি BD

// BD(hexadecimal) = 10111101 (binary)
unsigned char   l_Just4Bytes[ 4 ]   =   { 0xBD, 0xBD, 0xBD, 0xBD };

তারপরে আমরা বিভিন্ন ধরণের ব্যবহার করে অ্যারের সামগ্রীটি পড়ি।

unsigned char এবং signed char

// 10111101 as a PLAIN BINARY number equals 189
printf( "l_Just4Bytes as unsigned char  -> %hi\n", *( ( unsigned char* )l_Just4Bytes ) );

// 10111101 as a 2'S COMPLEMENT number equals -67
printf( "l_Just4Bytes as signed char    -> %i\n", *( ( signed char* )l_Just4Bytes ) );

unsigned short এবং short

// 1011110110111101 as a PLAIN BINARY number equals 48573
printf( "l_Just4Bytes as unsigned short -> %hu\n", *( ( unsigned short* )l_Just4Bytes ) );

// 1011110110111101 as a 2'S COMPLEMENT number equals -16963
printf( "l_Just4Bytes as short          -> %hi\n", *( ( short* )l_Just4Bytes ) );

unsigned int, intএবংfloat

// 10111101101111011011110110111101 as a PLAIN BINARY number equals 3183328701
printf( "l_Just4Bytes as unsigned int   -> %u\n", *( ( unsigned int* )l_Just4Bytes ) );

// 10111101101111011011110110111101 as a 2'S COMPLEMENT number equals -1111638595
printf( "l_Just4Bytes as int            -> %i\n", *( ( int* )l_Just4Bytes ) );

// 10111101101111011011110110111101 as a IEEE 754 SINGLE-PRECISION number equals -0.092647
printf( "l_Just4Bytes as float          -> %f\n", *( ( float* )l_Just4Bytes ) );

র‌্যামের 4 টি বাইট ( l_Just4Bytes[ 0..3 ]) সর্বদা একই থাকে। একমাত্র জিনিসটি পরিবর্তিত হয় তা হল আমরা কীভাবে তাদের ব্যাখ্যা করি।

আবার, আমরা সিস্টেমকে বলি কিভাবে প্রকারের মাধ্যমে তাদের ব্যাখ্যা করা যায়

উদাহরণস্বরূপ, উপরে আমরা l_Just4Bytesঅ্যারের বিষয়বস্তু ব্যাখ্যা করতে নিম্নলিখিত ধরণের ব্যবহার করেছি

  • unsigned char: প্লেইন বাইনারি 1 বাইট
  • signed char: 2 এর পরিপূরক 1 বাইট
  • unsigned short: সাধারণ বাইনারি স্বরলিপি 2 বাইট
  • short: 2 এর পরিপূরক 2 বাইট
  • unsigned int: সাধারণ বাইনারি স্বরলিপি 4 বাইট
  • int: 2 এর পরিপূরক 4 বাইট
  • float: আইইইই 754 একক নির্ভুলতার স্বরলিপিতে 4 বাইট

[সম্পাদনা] ব্যবহারকারী 4581301 দ্বারা মন্তব্য করার পরে এই পোস্টটি সম্পাদনা করা হয়েছে। এই কয়েকটি সহায়ক লাইন ফেলে দেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ!


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

+1 টি। আপনি যে বিষয়টি @ mw215 করছেন তা বিবেচনা করতে পারেন, এই প্রশ্ন / উত্তর জুটিকে একটি সম্প্রদায় উইকি এন্ট্রি নিজেই তৈরি করছে, কারণ এটি সেই ব্যক্তির পক্ষে দরকারী যারা দু'জনের পরিপূরক গণিতের প্রেক্ষাপটের বাইরে কাঁচা বাইট ব্যাখ্যাতে আগ্রহী হতে পারেন।
ওয়েলবোগ

আমি কেবল জানতে চাই 2 এর পরিপূরক সর্বদা অনুসরণ করে, মানে আমার যদি থাকে int x = -4এবং আমি তা printf("%d" , x)কীভাবে ব্যাখ্যা করি? এছাড়াও এর মধ্যে পার্থক্য কি unsigned intএবং signed intএবং %dএবং %u... এই একটি দীর্ঘ সময় এখন .Thanks আমার bugging করা হয়েছে।
সুরজ জৈন

@ সুরজ জৈন intপ্রকারগুলি ব্যবহার করার সময় , signedপরিবর্তনকারীটি ডিফল্ট হয়। এর অর্থ এটি intএবং signed intএকই ধরণের। সুতরাং দুটি সংজ্ঞা int i = -4;এবং signed int i = -4;একই অর্থ আছে।
mw215

@ সুরজ জৈন সিস্টেমটি প্রকারভেদ করে কীভাবে বাইটের ক্রমটি ব্যাখ্যা করতে পারে তা প্রতিষ্ঠিত করে। প্রকারগুলি সংজ্ঞায়িত করে: কতগুলি বাইট বিবেচনা করতে হবে এবং কীভাবে সেই বাইটগুলি ব্যাখ্যা করতে হবে। একটি 2 এরint পরিপূরকগুলিতে 4 বাইট এবং একটি সাধারণ বাইনারি স্বরলিপিতে 4 বাইট ( অপারেটরটি ব্যবহার করে আপনার সিস্টেমে প্রকৃত ধরণের আকার পরীক্ষা করুন )। unsigned intsizeof
mw215

1

স্ট্যান্ডফোর্ডের ইউটিউব চ্যানেল থেকে দেখার জন্য উপলব্ধ প্রোগ্রামিং প্যারাডিমস নামে বক্তৃতার সিরিজের দ্বিতীয় বক্তৃতায় (2 টির পরিপূরক সম্পর্কে ব্যাখ্যা শুরু হচ্ছে 13) প্রায় স্ট্যানফোর্ডের প্রফেসর জেরি কেইনকে দেখতে পাবেন। এখানে বক্তৃতা সিরিজের লিঙ্কটি রয়েছে: http://www.youtube.com/view_play_list?p=9D558D49CA734A02


0

টু এর পরিপূরক ব্যবহার করা হয়েছে কারণ এটি সার্কিটরিতে কার্যকর করা সহজ এবং নেতিবাচক শূন্যকেও অনুমতি দেয় না।

যদি এক্স বিট থাকে তবে দু'জনের পরিপূরকটি + (2 ^ x / 2 + 1) থেকে শুরু করে - (2 ^ x / 2)। একটির পরিপূরকটি + (2 ^ x / 2) থেকে - (2 ^ x / 2) পর্যন্ত চলবে, তবে একটি নেতিবাচক শূন্যকে অনুমতি দেবে (400 বিটের 1 এর পরিপূরক সিস্টেমে 0000 সমান 1000)।


0

ঠিক আছে, আপনার অভিপ্রায়টি আসলে আপনার বাইনারি সংখ্যার সমস্ত বিট বিপরীত করার নয়। প্রকৃতপক্ষে এটির প্রতিটি অঙ্ক 1 থেকে বিয়োগ করা এটি কেবল একটি ভাগ্যবান কাকতালীয় ঘটনা যে 1 টির ফলাফল 1 থেকে 1 কে বিয়োগ 0 এবং 1 টি 1 থেকে 1 বিয়োগ করে। সুতরাং বিটস ফ্লিপিং কার্যকরভাবে এই বিয়োগফলকে পরিচালনা করছে।

তবে আপনি কেন প্রতিটি সংখ্যার পার্থক্য 1 থেকে খুঁজে পাচ্ছেন? ভাল, আপনি না। আপনার আসল উদ্দেশ্যটি হ'ল প্রদত্ত বাইনারি সংখ্যার পার্থক্যটি অন্য বাইনারি সংখ্যার সাথে গণনা করা যা একই সংখ্যার সংখ্যাযুক্ত তবে কেবল 1 টি রয়েছে। উদাহরণস্বরূপ যদি আপনার নম্বর 10110001 হয়, আপনি যখন এই সমস্ত বিটগুলি ফ্লিপ করেন, আপনি কার্যকরভাবে গণনা করছেন (11111111 - 10110001)।

এটি টু কমপ্লিমেন্টের গণনার প্রথম পদক্ষেপটি ব্যাখ্যা করে। এবার আসুন দ্বিতীয় পদক্ষেপটি - 1 যুক্ত করুন - ছবিটিতেও।

উপরের বাইনারি সমীকরণে 1 যুক্ত করুন:

11111111 - 10110001 + 1

তুমি কি পেলে? এই:

100000000 - 10110001

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

তবে আমরা কেন এই পার্থক্যের পরে হ্যাঙ্কারিন '? ঠিক আছে, এখান থেকে আমার ধারণা, আপনি যদি উইকিপিডিয়া নিবন্ধটি পড়েন তবে ভাল হত ।


0

আমরা সংযোজন এবং বিয়োগ উভয়ের জন্য কেবল সংযোজন অপারেশন করি। সংযোজনের জন্য আমরা প্রথম অপারেন্ডে দ্বিতীয় অপারেন্ড যুক্ত করি। বিয়োগের জন্য আমরা দ্বিতীয় অপারেন্ডের 2 এর পরিপূরকটি প্রথম অপারেন্ডে যুক্ত করি।

2 এর পরিপূরক উপস্থাপনের সাথে বিয়োগের জন্য আমাদের পৃথক ডিজিটাল উপাদানগুলির প্রয়োজন নেই — কেবল সংযোজক এবং পরিপূরক ব্যবহৃত হয়।


0

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


0

পরিপূরক পদ্ধতিতে বিয়োগের কার্যকারিতা হ'ল হার্ডওয়্যার
জটিলতা হ্রাস করা addition সংযোজন এবং বিয়োগের জন্য বিভিন্ন ডিজিটাল সার্কিটের প্রয়োজন হয় না oth তবে সংযোজন এবং বিয়োগ কেবল অ্যাড্রেয়ার দ্বারা সঞ্চালিত হয়।


0

Two's-সম্পূরক প্রতিনিধিত্ব একটা বড় এডভান্টেজ যা এখনো এখানে উল্লেখ করা হয়েছে যে একটি two's-সম্পূরক সমষ্টি, পার্থক্য, বা পণ্যের নিচের বিট নির্ভরশীল হয় শুধুমাত্র operands সংশ্লিষ্ট বিট উপর। -১ এর জন্য 8 বিট স্বাক্ষরিত মানটি 11111111হ'ল যে কোনও সংখ্যার নিম্নতম 8 বিট 00000001অন্য কোনও পূর্ণসংখ্যার যার সর্বনিম্ন 8 বিট হয় 0000000তার সংখ্যার বিয়োগ করা হবে যার সর্বনিম্ন 8 বিট হবে11111111। গাণিতিকভাবে, মান -1 1 এর এক অসীম স্ট্রিং হতে পারে তবে নির্দিষ্ট পূর্ণসংখ্যার প্রকারের মধ্যে সমস্ত মান হয় 1 বা সমস্ত 0 এর নির্দিষ্ট বিন্দুর অতীত হবে, সুতরাং কম্পিউটারগুলির পক্ষে "সাইন-এক্সটেন্ড" করা সুবিধাজনক একটি সংখ্যার সবচেয়ে উল্লেখযোগ্য বিট যেমন এটি 1 বা 0 এর অসীম সংখ্যাকে উপস্থাপন করে represented

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

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


অনুগ্রহ করে আপনার উত্তরটি অনুচ্ছেদে ফর্ম্যাট করুন এবং কোড হিসাবে কোড হিসাবে চিহ্নিত করুন, এটি আরও পাঠযোগ্য হবে এবং আপনি উত্সাহ পাবেন।
সুরজ জৈন

@ সুরজজাইন: এটা কি আরও ভাল?
সুপারক্যাট

হ্যাঁ, এটি আগে যা ছিল তার চেয়ে ভাল, আমি আপনাকে একটি জিনিস জিজ্ঞাসা করতে চাই স্বাক্ষর করা চর a = 1 এবং স্বাক্ষরযুক্ত চর a = 1 এর মধ্যে পার্থক্য কী, তারা কীভাবে স্মৃতিতে প্রতিনিধিত্ব করে।
সুরজ জৈন

@SurajJain: two's-সম্পূরক সিস্টেমে যেখানে "গৃহস্থালির কাজ" "int- এ" [অর্থাত সিস্টেম বেশীরভাগ] চেয়ে ছোট, স্বাক্ষরিত ও স্বাক্ষরবিহীন গৃহস্থালির কাজ ধরনের অভিন্নরুপে আচরণ করবে ব্যতীত যে স্বাক্ষরিত ধরনের সাইন-প্রসারিত হবে যখন পড়া এবং স্বাক্ষরবিহীন ধরনের না। এই জাতীয় সিস্টেমে 194 বা -62 মান স্বাক্ষরিত চরে সংরক্ষণ করা 194 বা -62 স্বাক্ষরবিহীন চরে (যেমন 11000010) সংরক্ষণ করার সমান বিট প্যাটার্নটি লিখবে। একটি স্বাক্ষরিত চর থেকে বিট প্যাটার্নটি পড়লে ফল পাওয়া যাবে -62, এবং স্বাক্ষরবিহীন চর থেকে এটি পড়ার
ফলস

সাইন-বর্ধিত মানে?
সুরজ জৈন

0

বিভিন্ন ধরণের উপস্থাপনাগুলি হ'ল:

  1. স্বাক্ষরযুক্ত সংখ্যা প্রতিনিধিত্ব
  2. স্বাক্ষরিত নম্বর প্রতিনিধিত্ব
  3. এক পরিপূরক প্রতিনিধিত্ব
  4. দু'জনের পরিপূর্ণ প্রতিনিধিত্ব

- স্বাক্ষরিত সংখ্যার প্রতিনিধিত্ব কেবলমাত্র ইতিবাচক সংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয়

- সাইনড নম্বর প্রতিনিধিত্ব ইতিবাচক পাশাপাশি একটি নেতিবাচক সংখ্যা উপস্থাপন করতে ব্যবহৃত। স্বাক্ষরযুক্ত সংখ্যা উপস্থাপনায় এমএসবি বিট সাইন বিট উপস্থাপন করে এবং বিশ্রাম বিট সংখ্যাটি উপস্থাপন করে। যখন এমএসবি 0 হয় মানে সংখ্যাটি ইতিবাচক এবং যখন এমএসবি 1 হয় তখন সংখ্যাটি নেতিবাচক হয়।

স্বাক্ষরযুক্ত নম্বর উপস্থাপনের ক্ষেত্রে সমস্যাটি হ'ল 0 এর জন্য দুটি মান রয়েছে।

কারও পরিপূরক উপস্থাপনে সমস্যা হ'ল 0 এর জন্য দুটি মান রয়েছে।

তবে যদি আমরা দুইটির পরিপূরক প্রতিনিধিত্ব ব্যবহার করি তবে 0 এর জন্য কেবল একটি মান থাকবে তাই আমরা দু'জনের পরিপূরক আকারে নেতিবাচক সংখ্যাগুলি উপস্থাপন করি।

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


-1

ওয়ান এর কমপ্লিমেন্ট সিস্টেমের তুলনায় টু 2 এর পরিপূরকটি কেন negativeণাত্মক সংখ্যার প্রতিনিধিত্ব করতে ব্যবহৃত হয়েছে তার একটি সন্তোষজনক উত্তর হ'ল টু'র পরিপূরক সিস্টেমটি 0 এর একাধিক উপস্থাপনার সমস্যা সমাধান করে এবং শেষের দিকে বহন করার প্রয়োজনীয়তা যা ওয়ান এর সম্পূর্ণরূপে negativeণাত্মক প্রতিনিধিত্ব করে নম্বর।

আরও তথ্যের জন্য https://en.wikedia.org/wiki/Signed_number_ বিবরণী দেখুন

প্রায় শেষ-বহনের জন্য https://en.wikedia.org/wiki/End-around_carry দেখুন


প্রকৃতপক্ষে, যদি আপনার দশমিক বিন্দু থাকে এবং সমস্ত বিটগুলি কী সম্পর্কে স্পষ্ট হয়: "0..0000.1111..1" এর অর্থ হ'ল সমস্ত বাম-সর্বাধিক বিহীন বিটগুলি 0, এবং সমস্ত ডান-সর্বাধিক বিহীন বিটগুলি 1 এবং তাই "..১" এর অর্থ একটি বাহন ট্রিগার হয় ge সুতরাং এটি (যান্ত্রিকভাবে) "0.0001.0000..0" " এর অর্থ "1..1111.1111..1" শূন্যের সমান! এর অর্থ এটিও হ'ল যে কোনও পূর্ণসংখ্যার অবহেলা করার জন্য, আপনি সত্যিই এর বিটগুলি ফ্লিপ করবেন। তবে এটি এখন উপস্থাপনযোগ্য ভগ্নাংশের ক্ষেত্রে প্রযোজ্য।
রব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.