JavaScript supports octal and binary literals for working with numbers in octal (base-8) and binary (base-2) formats. This can be helpful when dealing with certain types of numerical data, such as file permissions, binary data, bitwise operations, and low-level system programming.
In this tutorial, we will explore how to use octal and binary literals in JavaScript with several code examples.
Table of Contents
1. Octal Literals
An octal literal is a number represented in base-8. In JavaScript, octal literals use a leading 0o or 0O (zero followed by a lowercase or uppercase “O”).
Syntax
let octalNumber = 0o[number];
The 0o prefix indicates that the number is in octal format.
[number] is a sequence of digits from 0 to 7.
Example 1: Basic Octal Literals
let octal1 = 0o10; // Octal 10 (base 8) let octal2 = 0o77; // Octal 77 (base 8) console.log(octal1); // Output: 8 (decimal) console.log(octal2); // Output: 63 (decimal)
Explanation
0o10 represents the octal number 10, which equals 8 in decimal.
0o77 represents the octal number 77, which equals 63 in decimal.
Example 2: Using Octal Literals for Permissions
Octal literals are often used in programming environments to represent file permissions, as in Unix-based systems.
let readWriteExecute = 0o777; // Full permissions let readOnly = 0o444; // Read-only permissions console.log(readWriteExecute); // Output: 511 (decimal) console.log(readOnly); // Output: 292 (decimal)
Explanation
0o777 represents full permissions (rwxrwxrwx), which converts to 511 in decimal.
0o444 represents read-only permissions (r–r–r–), which converts to 292 in decimal.
Example 3: Invalid Octal Literals
Octal literals can only contain digits from 0 to 7. Using digits outside this range will result in a syntax error.
// let invalidOctal = 0o89; // SyntaxError: Invalid or unexpected token
Explanation
Octal numbers can only have digits from 0 to 7. Including 8 or 9 in an octal literal will cause an error.
2. Binary Literals
A binary literal is a number represented in base-2. In JavaScript, binary literals use a leading 0b or 0B (zero followed by a lowercase or uppercase “B”).
Syntax
let binaryNumber = 0b[number];
The 0b prefix indicates that the number is in binary format.
[number] is a sequence of 0s and 1s.
Example 4: Basic Binary Literals
let binary1 = 0b1010; // Binary 1010 (base 2) let binary2 = 0b1111; // Binary 1111 (base 2) console.log(binary1); // Output: 10 (decimal) console.log(binary2); // Output: 15 (decimal)
Explanation
0b1010 represents the binary number 1010, which equals 10 in decimal.
0b1111 represents the binary number 1111, which equals 15 in decimal.
Example 5: Using Binary Literals in Bitwise Operations
Binary literals are commonly used in bitwise operations, which operate directly on binary digits of integers.
let mask = 0b0101; // Binary 0101 (decimal 5) let number = 0b1010; // Binary 1010 (decimal 10) let result = number & mask; // Bitwise AND operation console.log(result.toString(2)); // Output: 0 (binary) since there are no matching '1's
Explanation
0b0101 and 0b1010 are binary numbers.
The & (bitwise AND) operation compares each bit and returns 1 if both bits are 1. In this case, the result is 0.
Example 6: Invalid Binary Literals
Binary literals can only contain 0s and 1s. Using other digits will result in a syntax error.
// let invalidBinary = 0b102; // SyntaxError: Invalid or unexpected token
Explanation
Binary numbers can only have digits 0 and 1. Including any other digits in a binary literal will cause an error.
3. Conversions Between Binary, Octal, and Decimal
JavaScript provides built-in methods to convert numbers between binary, octal, and decimal.
Example 7: Converting Decimal to Binary and Octal
You can use the toString() method to convert a number to binary or octal format.
let number = 42; let binary = number.toString(2); // Convert to binary let octal = number.toString(8); // Convert to octal console.log(binary); // Output: "101010" console.log(octal); // Output: "52"
Explanation
number.toString(2) converts the decimal number 42 to binary (“101010”).
number.toString(8) converts the decimal number 42 to octal (“52”).
Example 8: Parsing Binary and Octal Strings
You can use parseInt() to convert a binary or octal string to a decimal number.
let binaryString = '1010'; let octalString = '52'; let binaryNumber = parseInt(binaryString, 2); // Parse as binary let octalNumber = parseInt(octalString, 8); // Parse as octal console.log(binaryNumber); // Output: 10 console.log(octalNumber); // Output: 42
Explanation
parseInt(binaryString, 2) converts the binary string “1010” to its decimal equivalent (10).
parseInt(octalString, 8) converts the octal string “52” to its decimal equivalent (42).
4. Real-world Applications of Binary and Octal Literals
Example 9: Setting Permissions with Octal Literals
Octal literals are useful when setting file permissions, commonly used in Unix-like operating systems.
let readWriteExecute = 0o755; // rwxr-xr-x let readWriteOnly = 0o644; // rw-r--r-- console.log(readWriteExecute); // Output: 493 console.log(readWriteOnly); // Output: 420
Example 10: Using Binary for Flag Management
Binary literals are often used in low-level programming for flag management.
let FLAG_READ = 0b0001; // 1 let FLAG_WRITE = 0b0010; // 2 let FLAG_EXECUTE = 0b0100; // 4 // Combining flags using bitwise OR let permissions = FLAG_READ | FLAG_WRITE; console.log(permissions.toString(2)); // Output: "11" (binary)
Explanation
This example uses binary literals to define flags and combines them using the bitwise OR (|) operation.
Summary
JavaScript's support for octal (0o
) and binary (0b
) literals makes it easier to work with non-decimal numeric systems, which can be helpful in various programming scenarios, such as file permissions and low-level bitwise operations.
Quick Reference
Format | Prefix | Example | Decimal Equivalent |
---|---|---|---|
Octal | 0o |
0o10 |
8 |
Binary | 0b |
0b1010 |
10 |
Common Uses
- Octal Literals: Useful for file permissions and other numeric codes in systems programming.
- Binary Literals: Helpful for bitwise operations, flag management, and working with binary data.
By mastering these literals, you can write more expressive and understandable JavaScript code when dealing with different numeric systems.