The prefix table giga to pico is the foundational lookup for scaling values in electronics and embedded systems. Whether you are calculating the decoupling capacitance for an I2C bus, sizing the heap memory for an ESP32-S3, or setting the SPI clock divider on a Raspberry Pi, misinterpreting these prefixes leads to bricked bootloaders, bus lockups, and miscalculated battery life.
In microcontroller design, the friction rarely comes from the base-10 SI prefixes themselves. The real trap is the collision between decimal SI standards (used by hardware manufacturers) and binary IEC standards (used by operating systems and compilers). This reference guide provides the exact lookup values, the binary modifiers that alter them, and the practical edge cases that datasheets often bury.
The Complete SI Metric Prefix Table (Giga to Pico)
How to read this table: This table is based on the BIPM 9th Edition SI Brochure and NIST metric guidelines. The Factor column shows the base-10 exponential multiplier. The Embedded Application column maps the prefix to real-world microcontroller parameters. Which column applies to your installation? Use the standard Decimal (SI) column when sizing physical components (resistors, capacitors), flash memory chips, and clock frequencies. Use the Binary modifier column (detailed in the next section) when calculating RAM allocation, RTOS heap sizes, and file system payloads.
| Prefix | Symbol | Factor (Base 10) | Decimal Value | Common Embedded Application |
|---|---|---|---|---|
| Giga | G | 10^9 | 1,000,000,000 | Raspberry Pi 5 CPU clock (e.g., 2.4 GHz) |
| Mega | M | 10^6 | 1,000,000 | ESP32 CPU clock (240 MHz); Flash size (4 MB) |
| Kilo | k | 10^3 | 1,000 | UART Baud rates (115.2 kbps); Pull-up resistors (4.7 kΩ) |
| (Base) | - | 10^0 | 1 | Volts, Amperes, Bytes, Ohms |
| Milli | m | 10^-3 | 0.001 | Active current draw (e.g., 80 mA for Wi-Fi TX) |
| Micro | µ | 10^-6 | 0.000001 | Bulk decoupling capacitors (100 µF); Deep sleep current (10 µA) |
| Nano | n | 10^-9 | 0.000000001 | High-frequency bypass caps (100 nF); Logic rise times (ns) |
| Pico | p | 10^-12 | 0.000000000001 | I2C bus parasitic capacitance limit (400 pF); RTC crystal load (12 pF) |
Binary vs. Decimal: How Modifier Rows Shift the Base Value
The standard SI prefix table assumes a base-10 decimal system. However, microprocessors operate in base-2. To resolve the mathematical drift between decimal and binary scaling, the IEC 80000-13 standard introduced binary prefixes. Understanding how these modifier rows alter your base value is critical for memory allocation.
- Decimal (SI): 1 Kilobyte (KB) = 1,000 bytes. 1 Megabyte (MB) = 1,000,000 bytes.
- Binary (IEC): 1 Kibibyte (KiB) = 1,024 bytes. 1 Mebibyte (MiB) = 1,048,576 bytes.
How the modifier changes your build: Flash memory manufacturers (like Winbond or Macronix) advertise capacity using decimal SI prefixes. A "4 MB" SPI flash chip contains exactly 4,000,000 bytes. However, when your RTOS (like FreeRTOS on the ESP32) or your file system (like LittleFS) addresses that memory, it uses binary math. If your code allocates memory in 1024-byte blocks, a 4,000,000-byte chip yields 3,906.25 KiB, not 4,000 KiB. Always use the binary modifier column when defining array sizes, DMA buffers, and heap limits in C/C++.
What the Prefix Table Cannot Tell You
While the prefix table giga to pico gives you the exact mathematical scaling, it cannot tell you the usable capacity of your embedded installation. Advertised silicon values are always higher than what is available to your application code.
Similarly, on a Raspberry Pi 5 with 8 GB (Giga) of RAM, the GPU firmware and VideoCore memory reservations will carve out anywhere from 64 MB to 512 MB before the Linux kernel even boots. The prefix table tells you what the silicon holds; the bootloader and partition map dictate what you actually get to use.
Embedded Prefix FAQ
Why does my 4MB ESP32 flash show less than 4,000,000 bytes in the serial monitor?
This is the combined result of the decimal-to-binary conversion and partition overhead. First, the OS reports binary Mebibytes (MiB) rather than decimal Megabytes (MB). 4,000,000 bytes divided by 1,048,576 equals roughly 3.81 MiB. Second, the ESP32 bootloader, partition table, and reserved NVS sectors consume the first ~100 KB of that space. If you are using Arduino IDE, check your "Partition Scheme" in the Tools menu; selecting "Default 4MB with spiffs" allocates roughly 1.2 MB for the sketch and 1.5 MB for the SPIFFS file system, leaving the rest for system overhead.
How do I convert microfarads (µF) to picofarads (pF) for I2C pull-ups?
The I2C specification strictly limits the total bus capacitance to 400 pF (pico farads) for standard and fast-mode operation. If you are debugging a locked-up I2C bus, you must sum all capacitance sources. A typical bulk decoupling capacitor is 100 µF (microfarads), which equals 100,000,000 pF—but this is placed on the VCC rail, not the SDA/SCL lines. The parasitic capacitance on your I2C lines comes from the microcontroller pins (usually ~10 pF each), the sensor pins (~10 pF each), and the PCB traces (roughly 1.5 pF per centimeter). To convert manually: multiply the microfarad value by 1,000,000 to get picofarads. If your bus exceeds 400 pF, you must lower your pull-up resistor value (e.g., from 4.7 kΩ down to 2.2 kΩ) to decrease the RC rise time, or drop the bus speed from 400 kHz to 100 kHz.
What is the difference between MHz and Mbps in SPI communication?
Mega-hertz (MHz) measures the clock frequency—the number of electrical pulses per second on the SCK line. Mega-bits per second (Mbps) measures the actual data throughput. In a standard full-duplex SPI setup, one bit is transferred per clock cycle, meaning a 10 MHz SPI clock theoretically yields 10 Mbps of throughput. However, the prefix table cannot account for protocol overhead. If your microcontroller spends 5 clock cycles asserting the Chip Select (CS) line and 3 cycles between bytes, your actual payload throughput will drop significantly below the theoretical Mbps limit. Always measure actual throughput using a logic analyzer rather than assuming MHz equals Mbps.






