سؤال

وياه! كنت أبحث في هذا الرمز على http://www.gnu.org/ البرمجيات / m68hc11 / أمثلة / primes_8c-source.html

ولقد لاحظت أنه في بعض الحالات كانوا الأرقام عرافة، كما هو الحال في خط 134:

for (j = 1; val && j <= 0x80; j <<= 1, q++)

والآن لماذا يستخدمون 0x80؟ أنا لست على ما يرام مع عرافة ولكني وجدت عرافة على الانترنت إلى عشري وأنه أعطاني 128 ل0x80.

وأيضا قبل خط 134، على خط 114 لديهم هذا:

small_n = (n & 0xffff0000) == 0;

ووعشري إلى عشري أعطاني 4294901760 لهذا العدد عرافة. حتى هنا في هذا الخط أنهم يبذلون قليلا وومقارنة النتيجة 0 ؟؟

لماذا لا تستخدم فقط في العدد؟ يمكن لأي شخص يرجى توضيح ويرجى إعطاء أمثلة على حالات أخرى.

وأيضا لقد رأيت طوابير طويلة من التعليمات البرمجية حيث انها مجرد أرقام عرافة ولم يفهم حقا لماذا: (

هل كانت مفيدة؟

المحلول

في كلتا الحالتين أنت الاستشهاد، ونمط قليلا من عدد مهم، وليس العدد الفعلي.

وعلى سبيل المثال، في الحالة الأولى، j ستكون 1، ثم 2، 4، 8، 16، 32، 64، وأخيرا 128 كما تقدم الحلقة.

في ثنائي، وهذا هو،

و0000:0001، 0000:0010، 0000:0100، 0000:1000، 0001:0000، 0010:0000، 0100:0000 و1000:0000.

وليس هناك خيار للثوابت الثنائية في C أو C ++، لكنه أوضح قليلا في عشري: 0x01، 0x02، 0x04، 0x08، 0x10، 0x20، 0x40، و0x80.

في المثال الثاني، كان الهدف هو إزالة اثنين بايت أقل من القيمة. حتى إعطاء قيمة 1234567890 نريد في نهاية المطاف مع 1234567168.
في عرافة، انها أكثر وضوحا: تبدأ 0x4996:02d2، تنتهي 0x4996:0000

.

نصائح أخرى

وهناك رسم الخرائط مباشرة بين عرافة (أو ثماني لهذه المسألة) أرقام وأنماط قليلا الأساسية، وليس هذا هو الحال مع العشرية. A عشري '9' يمثل شيئا مختلفا فيما يتعلق أنماط قليلا اعتمادا على ما هو عليه عمود في وما أرقام تحيط بها - ليس لديها علاقة مباشرة لنمط قليلا. في عرافة، وهو '9' يعني دائما "1001"، بغض النظر عن أي عمود. 9 = '1001'، 95 = '* 1001 * 0101 "وهكذا دواليك.

وأما من بقايا أيامي 8 بت أجد عرافة اختزال مريحة لشيء ثنائي. بت twiddling مهارة الموت. مرة واحدة (حوالي 10 سنة) شاهدت السنة الثالثة رقة التواصل في الجامعة حيث لا يوجد سوى 10٪ (5 من أصل 50 أو نحو ذلك) من الناس في الطبقة يمكن حساب قناع قليلا.

وعلى قناع بت. القيم عرافة تجعل من السهل أن نرى تمثيل ثنائي الأساسي. ن و0xffff0000 إرجاع أفضل 16 بت ن. 0xffff0000 يعني "16 1s و 16 0S في ثنائي"

و0x80 يعني "1000000"، لذلك عليك أن تبدأ مع "00000001"، وتستمر في تحويل تلك القطعة لأكثر من اليسار "0000010"، "0000100"، وما إلى ذلك حتى "1000000"

و0xffff0000 من السهل أن نفهم أنه من 16 مرة "1" و 16 مرات "0" في قيمة 32 بت، في حين 4294901760 هو السحر.

وأجد أنه من الجنون أن الأسرة C من اللغات دعمت دائما ثماني وعرافة ولكن ليس ثنائي. لقد طالما تمنت أنها ستضيف الدعم المباشر للثنائي:

int mask = 0b00001111;

ومنذ عدة سنوات / وظيفة، بينما كان يعمل على مشروع ينطوي على قدر هائل من الرياضيات المستوى قليلا، وأنا حصلت على ضاقوا ذرعا وإنشاء ملف رأس الوارد تعريفها الثوابت لجميع القيم الثنائية ممكنة تصل إلى 8 بت:

#define b0        (0x00)
#define b1        (0x01)
#define b00       (0x00)
#define b01       (0x01)
#define b10       (0x02)
#define b11       (0x03)
#define b000      (0x00)
#define b001      (0x01)
...
#define b11111110 (0xFE)
#define b11111111 (0xFF)

لقد جعلت بعض الأحيان وكود معين على مستوى قليلا أكثر قابلية للقراءة.

وأحيانا التمثيل المرئي القيم في HEX يجعل رمز أكثر قابلية للقراءة أو مفهومة. على سبيل المثال bitmasking أو استخدام بت يصبح غير واضح عند النظر في تمثيل عشرية من الأرقام.

وهذا يمكن القيام به في بعض الأحيان مع مقدار المساحة نوع قيمة معينة لهذا العرض، بحيث يمكن أيضا أن تلعب دورا في ذلك.

وربما يكون مثالا نموذجيا في وضع ثنائي، وذلك بدلا من استخدام العشرية لإظهار بعض القيم، ونحن نستخدم ثنائي.

ودعنا نقول زيارتها كائن مجموعة غير حصرية من الخصائص التي كان قيم إما أو إيقاف تشغيله (3 منهم) - طريقة واحدة لتمثيل الدولة من هذه الخصائص هي مع 3 بت.

والتمثيل الصحيحة هي من 0 إلى 7 في العشرية، ولكن هذا ليس واضحا جدا. أكثر وضوحا هو تمثيل ثنائي:

000، 001، 010، 011، 100، 101، 110، 111

وكما أن بعض الناس ليست سوى مريحة جدا مع عرافة. لاحظ أيضا أن الأرقام السحرية الثابت تلوينها ليست سوى ذلك، وأنه ليس كل ما المهم بغض النظر عن نظام الترقيم لاستخدام

وآمل أن يساعد.

وعموما استخدام الأرقام عرافة بدلا من عشري انها لأن الكمبيوتر يعمل مع بت (الأرقام الثنائية)، وعندما كنت تعمل مع بت هو أيضا أكثر قابلية للفهم واستخدام أرقام ست عشرية، لأن من الأسهل الذهاب من عرافة إلى ثنائي من عشري إلى ثنائي.

OxFF = 1111 1111 ( F = 1111 )

ولكن

255 = 1111 1111 

ولأن

255 / 2 = 127 (rest 1)
127 / 2 = 63 (rest 1)
63 / 2 = 31 (rest 1)
... etc

هل ترى ذلك؟ إنها أكثر من ذلك بكثير بسيط لتمرير من عرافة إلى ثنائي.

وأكبر استخدام مرة واحدة من عرافة هو على الارجح في البرمجة المضمنة. وتستخدم الأرقام عشري إلى قناع قبالة بت الفردية في سجلات الأجهزة، أو تقسيم القيم الرقمية متعددة معبأة في واحد 8، 16، أو تسجيل 32 بت.

عند تحديد أقنعة بت الفردية، والكثير من الناس تبدأ بها:

#define bit_0 1
#define bit_1 2
#define bit_2 4
#define bit_3 8
#define bit_4 16
etc...

وبعد فترة من الزمن، فإنها تقدم إلى:

#define bit_0 0x01
#define bit_1 0x02
#define bit_2 0x04
#define bit_3 0x08
#define bit_4 0x10
etc...

وبعد ذلك تعلم للغش، والسماح للمترجم توليد القيم كجزء من تحسين وقت الترجمة:

#define bit_0 (1<<0)
#define bit_1 (1<<1)
#define bit_2 (1<<2)
#define bit_3 (1<<3)
#define bit_4 (1<<4)
etc...

وهناك 8 بت في البايت. عرافة، قاعدة 16، هو مقتضب. ويتم التعبير عن أي قيمة البايت ممكنة باستخدام حرفين من مجموعة 0..9، بالإضافة إلى أ، ب، ج، د، ه، و.

وقاعدة 256 سيكون أكثر مقتضب. كل بايت من الممكن أن يكون حرف واحد خاص بها، ولكن معظم لغات الإنسان لا تستخدم 256 حرفا، لذلك هيكس هو الفائز.

لفهم أهمية أن يكون مقتضبا، والنظر في أن يعود في عام 1970، عندما كنت تريد أن تدرس ميغا بايت بك من الذاكرة، وقد طبع بها في عرافة. أن النسخة المطبوعة استخدام عدة آلاف الصفحات من ورقة كبيرة. أن ثماني وإهدار المزيد من الأشجار.

لتكون أكثر دقة، عرافة والعشرية، وكلها أرقام. والجذر (قاعدة 10، 16، الخ) هي الطرق لتقديم هذه الأرقام بطريقة إما أن يكون أكثر وضوحا، أو أكثر ملاءمة.

عند مناقشة "كم من شيء هناك" نحن عادة استخدام عشري. عندما كنا نبحث في عناوين أو أنماط قليلا على أجهزة الكمبيوتر، وعادة ما يفضل عرافة، لأن غالبا ما معنى بايت الفردية قد تكون مهمة.

وعرافة، (وثماني) لديها ممتلكات أنهم صلاحيات اثنين، ولذلك خريطة تجمعات قليلا لطيف. عرافة خرائط 4 بت لعاب عرافة واحد (0-F)، بحيث يتم تخزين بايت في اثنين من يقضم (00-FF). كانت ثماني شعبية على المعدات الرقمية (DEC) وغيرها من الأجهزة القديمة، ولكن واحدة خرائط رقم ثماني إلى ثلاثة أجزاء، لذلك لا حدود البايت ليس عبر كما لطيف.

وعموما، فإن اختيار الجذر هو وسيلة لجعل البرمجة أسهل - استخدام واحد يطابق المجال الأفضل

وعرافة أو عشري، أرقام تمثل 4 بت من البيانات، 0-15 أو في HEX 0 إلى القيم عرافة F. اثنان تمثل بايت.

وإذا نظرنا إلى ملف، وهذا بعض رمز groady جدا. أتمنى أن تكون جيدة في C وعدم استخدامه بمثابة البرنامج التعليمي ...

وعرافة مفيد عندما كنت تعمل مباشرة على مستوى بت أو مجرد فوقه. منها مثلا، والعمل على سائق حيث كنت تبحث مباشرة في بت القادمة من جهاز وtwiddling نتائج ذلك أن شخصا آخر يمكن قراءة نتيجة متماسكة. انها صغيرة الحجم سهلة القراءة إلى حد ما تمثيل ثنائي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top