কেন হেক্সাডেসিমাল সংখ্যা 0x এর সাথে উপসর্গ করা হয়?


414

কেন হেক্সাডেসিমাল সংখ্যা হিসাবে উপসর্গ করা হয় 0x? আমি উপসর্গটির ব্যবহার বুঝতে পারি তবে কেন 0xবেছে নেওয়া হয়েছিল তার তাত্পর্য আমি বুঝতে পারি না ।


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

30
পেডেন্টিক হওয়ার জন্য, কেউ শিরোনামে এই প্রশ্নটি দুটি ভিন্ন উপায়ে ব্যাখ্যাও করতে পারে: 1) "কেন হেক্সাডেসিমাল সংখ্যাগুলি 0x হিসাবে উপসর্গ করা হয়, অন্য কোনও উপসর্গ বা সূচকের বিপরীতে?" 2) "হেক্সাডেসিমাল সংখ্যার প্রবেশের সময় কেন আমাদের একটি উপসর্গ ব্যবহার করা দরকার? অবশ্যই সংকলক 58 এটিকে উপসর্গ ছাড়াও হেক্সাডেসিমাল সংখ্যা হিসাবে স্বীকৃতি দেবে?" প্রশ্নের দ্বিতীয় ব্যাখ্যার উত্তর তুচ্ছ। "123" হেক্সাডেসিমাল সংখ্যাও।
আন্দ্রেয়াস রেজব্রান্ড

উত্তর:


440

সংক্ষিপ্ত কাহিনী:0 পার্সার এটি একটি ধ্রুবক (এবং একটি আইডেন্টিফায়ার / সংরক্ষিত শব্দ) সঙ্গে তার আচরণ এর বলে। সংখ্যা বেস নির্দিষ্ট করার জন্য এখনও কিছু দরকার: এটি xএকটি স্বেচ্ছাসেবী পছন্দ।

দীর্ঘ গল্প: 60 এর দশকে, প্রচলিত প্রোগ্রামিং নম্বর সিস্টেমগুলি ছিল দশমিক এবং অষ্টাল - মেইনফ্রেমে 12, 24 বা 36 বিট প্রতি বিট ছিল, যা 3 = লগ 2 (8) দ্বারা সুন্দরভাবে বিভাজ্য।

বিসিপিএল ভাষা 8 1234অষ্টাল সংখ্যার জন্য সিনট্যাক্স ব্যবহার করে । কেন থম্পসন যখন বিসিপিএল থেকে বি তৈরি করেছিলেন, তিনি 0পরিবর্তে উপসর্গটি ব্যবহার করেছিলেন। এটি দুর্দান্ত কারণ

  1. একটি পূর্ণসংখ্যার ধ্রুবক এখন সর্বদা একক টোকেন নিয়ে থাকে,
  2. পার্সার এখনও এটি অবিরত বলতে পারে এটি একটি ধ্রুবক পেয়েছে,
  3. পার্সার তত্ক্ষণাত্ বেসটি বলতে পারে ( 0উভয় ভিত্তিতে একই)
  4. এটি গাণিতিকভাবে বুদ্ধিমান ( 00005 == 05), এবং
  5. কোনও মূল্যবান বিশেষ অক্ষরের প্রয়োজন নেই (যেমন রয়েছে #123)।

যখন বি থেকে সি তৈরি করা হয়েছিল, তখন হেক্সাডেসিমাল সংখ্যার প্রয়োজনীয়তা দেখা গেল (পিডিপি -11 এ 16-বিট শব্দ ছিল) এবং উপরের সমস্ত পয়েন্ট এখনও বৈধ ছিল। যেহেতু অন্যান্য মেশিনগুলির জন্য এখনও অষ্টালগুলির প্রয়োজন 0xছিল , তা নির্বিচারে বেছে নেওয়া হয়েছিল ( 00সম্ভবত বিশ্রী হিসাবে প্রত্যাখ্যান করা হয়েছিল)।

সি # সি এর বংশধর, সুতরাং এটি সিনট্যাক্সের উত্তরাধিকার সূত্রে প্রাপ্ত।


112
আমার মনে 0xহয় না ওভারটি 00পছন্দ / বিশ্রীতা ছিল। 00বিদ্যমান কোড ভঙ্গ করবে। 0010অষ্টাল যেমন হয় 8, 0010তেমনি হেক্সিডিসিমালও হবে 16। তারা দ্বিতীয় সংখ্যাটির সূচক হিসাবে কোনও সংখ্যা ব্যবহার করতে পারেনি (বাদে 8বা 9, এবং উভয়ই হেক্সিডেসিমালের সাথে সম্পর্কিত কোনও তাত্পর্য রাখে না) তাই কোনও চিঠি আবশ্যক। এবং এটি হয় 0hবা 0x( এইচএক্স আইডিসিমাল) ছেড়ে যায় । এই বিন্দু থেকে দেখে মনে হচ্ছে এটি সত্যিকার অর্থেই পছন্দের দিকে ফিরে এসেছে।
GManNickG


23
একটি ব্যবহার 0অকট্যাল প্রিফিক্স বছরের পর বছর ধরে তাই খুব অনেক সমস্যা দেখা দেয়। উল্লেখযোগ্যভাবে যুক্তরাজ্যের মতো দেশে যেখানে টেলিফোন নম্বরগুলি a দিয়ে শুরু হয় 0। জাভাস্ক্রিপ্ট এবং অন্যান্য অনেক ভাষাগুলি এগুলি অষ্টাল হিসাবে বিশ্লেষণ করবে, সংরক্ষণের আগে নম্বরটি ম্যাঙ্গলিং করবে। মজা করার জন্য যোগ করার জন্য, এক জনপ্রিয় ডাটাবেসের পণ্যের হবে চুপটি দশমিক পার্সিং ফিরে যান সংখ্যা উপস্থিত রয়েছে একটি করে 8বা 9
বেসিক

1
12, 24 এবং 36 4 দ্বারা বিভাজ্য তাই তারা কেন এটির জন্য হেক্সাডেসিমাল ভাবেন নি?
ফুক্লভ

4
@ LưuVĩnhPhúc সম্ভবত কারণ হেক্সাডেসিমাল খুব প্রাসঙ্গিক ছিল না। বেশিরভাগ হার্ডওয়্যার, সফ্টওয়্যার, এবং ডকুমেন্টেশনগুলি অষ্টালের চেয়ে অনেক বেশি ভাল। বিসিপিএল প্রথমে 36 বিট আইবিএম 7094 এ প্রয়োগ করা হয়েছিল , একটি নির্দেশিকা বিন্যাসটি দুটি 3 বিট অংশ এবং 2 15 বিট অংশে বিভক্ত করা হয়েছিল; 6 বিট অক্ষর; এবং অষ্টালে ডকুমেন্টেশন। বি এর প্রাথমিক বাস্তবায়নগুলি পিডিপি -7 (18 বিট) এবং হানিওয়েল জিই -945 (36 বিট, তবে 18 বিট সম্বোধন সহ, এবং 6 এবং 9 বিট বাইটের জন্য সমর্থন) ছিল) বিটের পরে 16 বিট পিডিপি -11 বেরিয়েছে, তাই বি এর নকশাকে খুব বেশি প্রভাবিত করতে পারে না।
বিট্রি

97

দ্রষ্টব্য: আমি সঠিক উত্তরটি জানি না, তবে নীচে কেবলমাত্র আমার ব্যক্তিগত জল্পনা!

যেমন একটি সংখ্যার আগে একটি 0 উল্লেখ করা হয়েছে অর্থ এটি অষ্টাল:

04524 // octal, leading 0

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

8000h // hex
FF00h // oops - valid identifier!  Hex or a variable or type named FF00h?

আপনি একই কারণে কোনও চরিত্র নিয়ে নেতৃত্ব দিতে পারবেন না:

xFF00 // also valid identifier

একটি হ্যাশ ব্যবহার সম্ভবত ফেলে দেওয়া হয়েছিল কারণ এটি প্রিপ্রোসেসরের সাথে বিরোধযুক্ত:

#define ...
#FF00 // invalid preprocessor token?

শেষ পর্যন্ত, যে কারণেই হোক না কেন, তারা হেক্সাডেসিমাল বোঝাতে একটি শীর্ষস্থানীয় 0 এর পরে একটি এক্স রাখার সিদ্ধান্ত নিয়েছে। এটি দ্ব্যর্থহীন যেহেতু এটি এখনও একটি সংখ্যা অক্ষর দিয়ে শুরু হয় তাই কোনও বৈধ শনাক্তকারী হতে পারে না এবং এটি সম্ভবত একটি শীর্ষস্থানীয় 0 এর অষ্টাল সম্মেলনের ভিত্তিতে তৈরি।

0xFF00 // definitely not an identifier!

3
মজাদার. আমি ধারণা করি তারা হেক্স বোঝাতে একটি শীর্ষস্থানীয় 0 এবং ট্রেলিং এইচ ব্যবহার করতে পারত। পিছনের এইচটি সম্ভবত টাইপ স্পেসিফার প্রত্যয় দিয়ে বিভ্রান্ত হত, যেমন 0xFF00l বনাম 0FF00hl
জেডান

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

1
তারা উভয় একই সময়ে আবিষ্কার করা হত না? কেন সেখানে কখনও অন্যটি থাকবে না?
অ্যাশলেব্রাইন

কেন অষ্টাল হতে পারে তবে একই সময়ে হেক্সাডেসিমাল না হওয়ার জন্য অ্যাশলেস ব্রেন @ ইরোলার উত্তর দেখুন।
jv42

2
@ জেডান তারা এটি অনেক আগে ব্যবহার করেছে। X86 ইন্টেল অ্যাসেমব্লিতে একটি অক্ষর দিয়ে শুরু করা হলে একটি হেক্সাস আক্ষরিক অবশ্যই সর্বদা 0 দ্বারা উপস্থাপিত হওয়া উচিত। উদাহরণস্বরূপ 0xFFAB1234হিসাবে লিখতে হবে 0FFAB1234h। আমি Pascal সালে ইনলাইন এ এস এম থেকে এটা মনে আছে যখন আমি ছিল তরুণ stackoverflow.com/q/11733731/995714
phuclv

27

এটি অন্য কোনও বেসের চেয়ে সংখ্যাটি হেক্সাডেসিমালে রয়েছে তা বোঝানোর একটি উপসর্গ। সি প্রোগ্রামিং ভাষাটি সংকলক বলতে এটি ব্যবহার করে।

উদাহরণ:

0x64006*16^3 + 4*16^2 + 0*16^1 +0*16^0 = 25600. সংকলক পড়লে অনুবাদ করে 0x6400, এটি 0x শব্দটির সাহায্যে সংখ্যাটি হেক্সাডেসিমাল বোঝে । সাধারণত আমরা (00৪০০) or বা (00৪০০) বা যা কিছু .. দ্বারা বুঝতে পারি

জন্য বাইনারি এটি হবে:

0b00000001

আশা করি আমি কোনওভাবে সাহায্য করেছি।

শুভ দিন!


2
বাইনারি আক্ষরিকাগুলি কেবল সি ++ এ সি ++ 14 সমর্থিত, এবং সি তে মোটেই সমর্থিত নয়।
রুসলান

1
এটি কেন ব্যাখ্যা করে না । বিশেষত, আপনি কেন প্রথম উদাহরণটি লিখতে পারেননি x6400? xএখনও হেক্সাডেসিমেল অনুমান করতে ব্যবহার করা যেতে পারে।
অ্যারন ফ্রাঙ্ক

12

পূর্ববর্তী 0 0 বেস 2, 8 বা 16 এর একটি সংখ্যা নির্দেশ করতে ব্যবহৃত হয়।

আমার মতে, 0x হেক্স নির্দেশ করতে বেছে নেওয়া হয়েছিল কারণ 'x' হেক্সের মতো শোনাচ্ছে।

শুধু আমার মতামত, তবে আমি মনে করি এটি উপলব্ধি করে।

শুভ দিন!


2
উত্তরের জন্য ধন্যবাদ! আমি বুঝতে পারি যে এটি স্ট্যাকওভারফ্লোতে আপনার প্রথম পোস্ট। মতামত সত্য থেকে পৃথক করা হলে উত্তর আরও সহায়ক হতে পারে।
বিবেক_গানেসান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.