关于位运算代码中while(n>0)判断时n存储形式的疑问
十进制转二进制C++代码的存储与循环判断疑问
#include <iostream> #include <math.h> using namespace std; // converting from decimal to binary int main() { int n, bit, ans = 0, i = 0; cout << "enter a number: "; cin >> n; while (n > 0) { bit = n & 1; ans = round(bit * pow(10, i)) + ans; /* we used 'round' bcoz pow(10, 2) give 99.99999 it differs from compiler to compiler */ n = n >> 1; i++; } cout << ans; return 0; }
上述是一段实现十进制转二进制的C++位运算代码,我存在如下疑问:在
while(n>0)的循环判断中,变量n是以十进制形式还是二进制形式存储?例如当n=5时,循环是判断(5>0)还是(101>0)?
我是平台新手,此前的问题因获赞不足被删除,目前正在学习编程,恳请各位帮忙解答。
解答:
- 变量n在计算机内存中始终以二进制形式存储:不管你输入的是十进制的5,还是其他进制的数值,最终都会被转换为二进制(如5对应的二进制是
0b101)存储到内存里,十进制只是人类方便读写的表示方式。 while(n>0)的判断逻辑是比较数值大小:当n=5时,循环判断的是「数值5是否大于0」,而不是把二进制的101当作十进制数去和0比较。计算机内部的运算和判断都是基于数值本身,进制不影响逻辑判断的本质。
内容的提问来源于stack exchange,提问作者Vaibhav Kumar
相关产品推荐
相关产品推荐

