عن طريق روبي لتحويل الأعداد الصحيحة غير موقعة المخزنة كما وقعت مرة أخرى إلى القيمة الأصلية

StackOverflow https://stackoverflow.com/questions/301259

سؤال

وA-برنامج C هو وضع ما تعتبره الأعداد الصحيحة غير موقعة 64 بت إلى عمود في قاعدة بيانات بوستجرس التي يتم كتابتها كما int8. لبوستجرس، int8 دائما "وقع int8" (لا شيء من هذا القبيل لأنه "int8 غير موقعة '). لذلك البرنامج روبي لدي أرقام يظهر انتشلت من بوستجرس في النصف العلوي من هذه المساحة بأنها سلبية.

ما هي الطريقة الصحيحة، في روبي، لاتخاذ هذا صحيح، لقد وتحويله إلى 64 بت <م> غير الموقعة صحيح أن C-مبرمج يقصد؟

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

المحلول

ولست متأكدا من تفاصيل روبي، ولكن أساسا تحتاج إلى إضافة 2 ^ 64 إذا كان الرقم سالبا. هذا على افتراض يتم تخزين الرقم كما تكملة 2، والتي من شبه المؤكد.

ولمعلوماتك، نظام مكمل 2، وذلك أساسا أنه يعامل (ويقول) عدد 32 بت كرقم وزارة الدفاع 2 ^ 32. وهذا يعني -1 هو نفس الشيء 2 ^ 32-1 أو 0xFFFFFFFF. هذا اتضح أن تكون بسيطة جدا لاستخدام على مستوى الأجهزة.

نصائح أخرى

وهذا قد عمل:

x += 0x1_0000_0000_0000_0000 if x < 0

وثابت ضخم هو 2 إلى 64، وحرفي وضعها الطبيعي. أضفت سفلية لجعله أسهل للتحقق من أن الرقم هو في الواقع واحدة تليها 64 بت من الأصفار. يمثل كل رقم عرافة أربعة بت، كما هو الحال دائما. على أحرف هي جملة روبي القياسية.

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