这是我的代码:
int dec1 = 0, rem1=0, num1, base1 = 1;
int a = 101;
while (a > 0){
rem1 = a % 10;
dec1 = dec1 + (rem1 * base1);
base1 = base1 * 2;
a = a / 10;
}
cout << dec1 << endl;
这个输出是5。正确。
然而,当'a'被改为0101时,输出变成了17。我认为我的错误与对取模运算符的误解有关。
101%10 = 1 对吗?编译器通常会以相同的方式读取0101%10吗?
我在代码中添加了一个cout语句,以查看在计算0101%10的值之后rem1中存储了什么值。
int dec1 = 0, rem1=0, num1, base1 = 1;
int a = 101;
while (a > 0){
rem1 = a % 10;
cout << rem1 << endl;
dec1 = dec1 + (rem1 * base1);
base1 = base1 * 2;
a = a / 10;
}
cout << dec1 << endl;
从这里,我能够看到在计算0101%10之后,rem1存储了5而不是1的值。
在MSB前面添加0是否告诉编译器“嘿,这个数字是二进制的?”因为如果编译器读取的是5%10而不是0101%10,则我猜错误是有道理的。
经过测试我的理论,我将'a'更改为1000,输出结果为8,这是正确的。
将'a'更改为01000会得到24的结果。 rem1 = 01000%10应该是0,然而rem1存储了2。 01000二进制= 8十进制。 8%10 = 8?而不是2?
我不确定发生了什么,任何帮助都将不胜感激!
int a
将101
以十进制形式存储,即"一百零一"。 - rbaleksandar