Binary representation of a given number

本文介绍了一种简单的方法来打印给定数字的二进制形式,包括迭代和递归两种实现方式。通过这两种方法,可以有效地确定数字中每一位是否为1或0。

reference: 

http://www.geeksforgeeks.org/binary-representation-of-a-given-number/


Problem Definition:

Write a program to print Binary representation of a given number.


Solution:

This is a simple problem, the reason why it is posted here is because it was a MS Interview question. Obviously, we can do it both in iterative and recursive way.

Iterative way: 

1) Let us take number 'NUM' and we want to check whether it's 0th bit is ON or OFF	
	bit = 2 ^ 0 (0th bit)
	if  NUM & bit == 1 means 0th bit is ON else 0th bit is OFF

2) Similarly if we want to check whether 5th bit is ON or OFF	
	bit = 2 ^ 5 (5th bit)
	if NUM & bit == 1 means its 5th bit is ON else 5th bit is OFF.

Recursive way: 

step 1) if NUM > 1
	a) push NUM on stack
	b) recursively call function with 'NUM / 2'
step 2)
	a) pop NUM from stack, divide it by 2 and print it's remainder.

Code:

Iterative code:
void bin(unsigned n)
{
    unsigned i;
    for (i = 1 << 31; i > 0; i = i / 2)
        (n & i)? printf("1"): printf("0");
}

recursive code:
void bin(unsigned n)
{
    /* step 1 */
    if (n > 1)
        bin(n/2);
 
    /* step 2 */
    printf("%d", n % 2);
}



To modify the given program to check if a number is a **multiple of 4** instead of a multiple of 8, we need to understand how bitwise operations can be used for divisibility checks. ### 🔍 Key Insight: A number is a **multiple of 4** if its last two bits (least significant bits) are `0`. That’s because: - $ 4 = 2^2 $ - So any multiple of 4 in binary ends with at least two zeros. - Example: - 4 → `100` - 8 → `1000` - 12 → `1100` Thus, checking whether the last two bits are zero can be done using the bitwise AND operation: ```cpp (A & 3) == 0 ``` Why 3? Because `3` in binary is `11`, so `(A & 3)` masks the last two bits. If those two bits are zero, the result is zero → divisible by 4. Also note: The original code checks `(A & 7) == 0` which tests for multiples of 8 (`7 = 111` in binary, checks last three bits). --- ### ✅ Modified C++ Program ```cpp #include <iostream> #include <bitset> // For easier binary conversion (alternatively use _itoa_s) using namespace std; int main() // Changed 'void main()' to 'int main()' for standard compliance { int A; char tmp[33]; cout << "Enter a number: "; cin >> A; _itoa_s(A, tmp, 2); // Convert to binary string cout << "Number in binary form = " << tmp << endl; // Check if multiple of 4: last two bits must be 0 if ((A & 3) == 0) cout << "The number is a multiple of 4" << endl; else cout << "The number is not a multiple of 4" << endl; return 0; } ``` --- ### 🧠 Explanation: - `_itoa_s(A, tmp, 2)` converts integer `A` into its binary representation as a string. - `(A & 3)` performs bitwise AND with `3` (`0b11`), which isolates the last two bits. - If the result is `0`, then the number is divisible by 4. - We changed `void main()` to `int main()` because `void main()` is non-standard; `int main()` is correct in C++. --- ### 💡 Example Runs: | Input | Binary | Output | |-------|--------|--------| | 4 | 100 | Multiple of 4 | | 8 | 1000 | Multiple of 4 | | 12 | 1100 | Multiple of 4 | | 6 | 110 | Not (last two bits = 10 → 2) | | 7 | 111 | Not | --- ### ⚠️ Edge Cases Handled? Yes: - Zero: `0 & 3 == 0` → correctly reports "multiple of 4" - Negative numbers: Works due to two's complement — only cares about bit pattern If you want strictly positive logic, add input validation. --- ### Optional Enhancement (Using `bitset` for cleaner binary output): ```cpp #include <iostream> #include <bitset> using namespace std; int main() { int A; cout << "Enter a number: "; cin >> A; bitset<32> binary(A); cout << "Number in binary form = " << binary << endl; if ((A & 3) == 0) cout << "The number is a multiple of 4" << endl; else cout << "The number is not a multiple of 4" << endl; return 0; } ``` This avoids reliance on `_itoa_s`, which is Microsoft-specific. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值