حاسبة تدوير البتات دائريا إلى اليسار واليمين
تنفذ حاسبة تدوير البتات هذه تدويرا دائريا إلى اليسار أو اليمين داخل عدد صحيح غير موقّع ثابت العرض.
شغّل الأداة مجانًا
تعود البتات التي تخرج من أحد الطرفين فورا من الطرف الآخر، كما يحدث في منطق مسجلات الإزاحة والعمليات التشفيرية الأساسية والمجاميع الاختبارية والبرامج المضمنة وتنسيقات البيانات منخفضة المستوى. أدخلوا قيمة عشرية أو سداسية عشرية أو ثنائية، واختاروا العرض والاتجاه، وحددوا عددا غير سالب للتدوير. تحافظ الحاسبة على مواضع الأصفار البادئة وتعرض نتائج دقيقة بالصيغة العشرية والثنائية ثابتة العرض والسداسية عشرية المكتملة.
اختاروا القيمة وعرض المسجل بدقة
لا يكون للتدوير معنى محدد إلا عند معرفة عرض البتات. فقد تنتج القيمة العددية نفسها نتيجتين مختلفتين في مسجل بعرض 8 بتات وآخر بعرض 16 بتا، لأن حد الالتفاف يقع في موضع مختلف. أدخلوا القيمة غير الموقعة بالصيغة العشرية المعتادة، أو استخدموا البادئة 0x للصيغة السداسية عشرية و0b للصيغة الثنائية. ثم اختاروا عرضا من 1 إلى 4096 بت. يجب أن تقع القيمة كاملة ضمن العرض المختار؛ إذ يمنع رفض القيم الأكبر اقتطاعا ضمنيا قد يخفي معلومات. تعد مواضع الأصفار البادئة جزءا من المسجل حتى إن لم تظهر في الإدخال. فمثلا، تعامل القيمة العشرية 5 بعرض 8 على أنها 00000101 لا 101 فقط. يكتمل الحقل الثنائي دائما حتى العرض المحدد، بينما يكتمل الحقل السداسي عشري بعدد كاف من الخانات الصحيحة لتمثيله. يسهّل هذا العرض الصريح مقارنة النتيجة بمخطط مسجل أو حقل بروتوكول أو شاشة مصحح أخطاء أو تطبيق بلغة برمجة.
افهموا الحركة الدائرية في الاتجاهين
يختلف التدوير الدائري عن الإزاحة المنطقية العادية لأنه لا يهمل أي بت ولا يضيف صفرا جديدا. عند التدوير إلى اليسار، تتحرك البتات نحو الطرف الأعلى أهمية، وتعود البتات التي تتجاوز ذلك الحد إلى المواضع الأقل أهمية. وعند التدوير إلى اليمين تنعكس الحركة، فتعود البتات الخارجة من الطرف الأقل أهمية إلى الطرف الأعلى أهمية. تطبق الحاسبة العملية على نمط العرض الثابت كاملا بحساب صحيح دقيق. يعيد عدد تدوير مساو للعرض النمط الأصلي، وينطبق ذلك أيضا على أي مضاعف صحيح للعرض. لذلك يخفض العدد المطلوب بتطبيق باقي القسمة على العرض، وتظهر القيمة الفعلية في النتيجة باسم normalized_shift. يفيد ذلك في فحص البرامج التي تقبل أعدادا غير مقيدة أو في نمذجة عتاد لا يحتاج محدده إلا إلى حالة لكل موضع في المسجل. وإذا كان العدد الفعلي صفرا، تحفظ القيمة مباشرة من دون إجراء إزاحة غير صالحة بمقدار العرض الكامل.
اقرؤوا المخرجات وتحققوا من التطبيق
تحتفظ الاستجابة بالقيمة الأصلية بصيغة عشرية موحدة، والعرض المختار، وعدد التدوير المطلوب، والعدد الفعلي، والاتجاه. ثم تعرض القيمة المدورة بالصيغة العشرية والثنائية ثابتة العرض والسداسية عشرية بالأحرف الكبيرة. تخدم هذه الصيغ المتكافئة أغراض تحقق مختلفة: تكشف الثنائية كل بت التف حول الطرف، وتطابق السداسية عشرية المسجلات والوثائق التقنية بصورة موجزة، وتناسب العشرية واجهات API أو حالات الاختبار التي تتجنب القيم ذات البادئات. لاختبار تطبيق ما، استخدموا نمطا يحوي بتات مضبوطة قرب الطرفين حتى تظهر الإزاحة الخاطئة بوضوح. اختبروا أيضا العدد صفر، وعددا يساوي العرض تماما، وعددا أكبر منه. تكشف هذه الحالات الأخطاء الشائعة في اختزال باقي القسمة وسلوك الإزاحة الخاص بلغات البرمجة. تستخدم الخوارزمية حساب الأعداد الصحيحة بدقة اعتباطية بدلا من معاملات JavaScript ذات 32 بتا، ولذلك لا تتعرض العروض الأكبر لتحويل الإشارة أو الحجب الصامت. المعالجة حتمية ومحلية ومحدودة، ولا تستخدم شبكة أو عشوائية أو حالة زمنية.
حالات الاستخدام
فحص منطق المسجلات المضمنة
قارنوا خرج البرنامج الثابت بنمط ثنائي دقيق ثابت العرض قبل كتابة شيفرة الجهاز أو مراجعتها.
التحقق من الخطوات التشفيرية
أكدوا التدويرات الدائرية في دوال التجزئة والشفرات وعمليات المزج من دون مفاجآت حساب 32 بتا ذي الإشارة.
إنشاء متجهات اختبار للبروتوكولات
أنشئوا القيم العشرية والثنائية والسداسية عشرية المتوقعة للحقول التي تلتف بتاتها ضمن عرض محدد.
الأسئلة الشائعة
ما الفرق بين تدوير البتات وإزاحتها؟
تهمل الإزاحة المنطقية البتات عند أحد الطرفين وتضيف أصفارا عند الآخر. أما التدوير فيعيد البتات إلى الطرف المقابل، فتظل جميعها ضمن النمط ثابت العرض.
ماذا يحدث عندما يتجاوز عدد التدوير العرض؟
يخفض العدد بتطبيق باقي القسمة على العرض. تعرض الاستجابة الإزاحة المطلوبة والإزاحة الفعلية الموحدة معا.
هل يمكن إدخال قيم سداسية عشرية أو ثنائية؟
نعم. ضعوا 0x قبل القيمة السداسية عشرية و0b قبل القيمة الثنائية. يفسر الإدخال بلا بادئة على أنه عشري.
لماذا يجب أن تقع القيمة ضمن العرض المختار؟
قد يزيل الاقتطاع التلقائي البتات العليا بصمت وينتج نتيجة مضللة. ترفض الحاسبة القيمة حتى تصححوا القيمة أو العرض صراحة.
ما تكلفة طلب API؟
تكلفة كل طلب API هي $0.002. تنفذ نسخة المتصفح الحساب الحتمي نفسه محليا.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/elec/rotate-bits \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":"150","width":8,"shift":3,"direction":"left"}'const res = await fetch("https://api.kit.forhosting.com/elec/rotate-bits", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": "150",
"width": 8,
"shift": 3,
"direction": "left"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/rotate-bits",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": "150",
"width": 8,
"shift": 3,
"direction": "left"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/rotate-bits", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":"150","width":8,"shift":3,"direction":"left"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":"150","width":8,"shift":3,"direction":"left"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/rotate-bits", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"value": "150",
"width": 8,
"shift": 3,
"direction": "left"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.rotate_bits",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |