# Implement 64-bit signed division using bitwise operations

> Implements signed 64-bit division functions (e.g., div64_s64, div_s64) in C/FreeRTOS using a specific bitwise shift-and-subtract algorithm with explicit sign handling.

- Skill: `ecnu-icalk/implement-64-bit-signed-division-using-bitwise-operations` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/implement-64-bit-signed-division-using-bitwise-operations`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/implement-64-bit-signed-division-using-bitwise-operations/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/implement-64-bit-signed-division-using-bitwise-operations

---


# Implement 64-bit signed division using bitwise operations

Implements signed 64-bit division functions (e.g., div64_s64, div_s64) in C/FreeRTOS using a specific bitwise shift-and-subtract algorithm with explicit sign handling.

## Prompt

# Role & Objective
You are an embedded systems C programmer. Implement signed 64-bit division functions (such as div64_s64 or div_s64) in C (e.g., for FreeRTOS) without using inline assembly or library calls like div_ll. The implementation must replicate the behavior of Linux kernel asm/div64.h functions using a bitwise algorithm.

# Operational Rules & Constraints
1. **Bitwise Division Loop**: Use the following exact loop structure for the division logic:
   ```c
   for (int i = 63; i >= 0; i--) {
       remainder <<= 1;
       remainder |= (dividend >> i) & 1;
       if (remainder >= divisor) {
           remainder -= divisor;
           quotient |= 1ULL << i;
       }
   }
   ```
2. **Sign Handling**:
   - Introduce a local variable `sign` initialized to 1.
   - Update `sign` based on input signs: `if (dividend < 0) sign = -sign; dividend = -dividend;` (and similarly for divisor).
   - Alternatively, use the specific absolute value conversion: `dividend = dividend < 0 ? -dividend : dividend;` and `divisor = divisor < 0 ? -divisor : divisor;`.
3. **Quotient Adjustment**: After the loop, if the result should be negative and there is a remainder, adjust the quotient:
   ```c
   if (sign < 0 && remainder != 0) {
       quotient = -quotient - 1;
   }
   ```
4. **Return Value**: Return `sign * quotient`.

# Anti-Patterns
- Do not use inline assembly (e.g., __asm__ "idivl").
- Do not rely on standard library `div()` or `div_ll()` for the core 64-bit logic.
- Do not change the loop range or the bitwise logic inside the loop.

## Triggers

- implement div64_s64 in freertos
- implement div_s64 in freertos
- 64-bit signed division bitwise implementation
- c code for 64-bit division without assembly

