gpt4 book ai didi

c - 不懂的考试问答

转载 作者:行者123 更新时间:2023-11-30 21:21:37 25 4
gpt4 key购买 nike

以下代码打印出 5。有人能给我解释一下吗?我想我主要对数学感到困惑;例如,使用“0”而不是 0 以及如何在纸上进行数学计算...

      #include <stdio.h>

int main (int argc , char * argv [])
{
char * c_pt ;
int n = 0;
if( argc == 2)
{
c_pt = argv [1];
while (* c_pt )
{
if (* c_pt < '0' || * c_pt > '1') break ;
n = n*2 + * c_pt - '0';
c_pt ++;
}
printf ("%d\n", n);
}
}

最佳答案

当您访问包含数字的字符串中的字符时,您可能会得到字符“0”或“1”。但是'0'的整数值为48,'1'的整数值为49,所以如果你想把它们变成整数0和1进行算术,你需要减去一些东西。您可以减去 48,但下一个读取您代码的人不知道您为什么这样做。因此,通常您会减去值所表示的字符:'0' - '0' = 0 和 '1' - '0' = 1

此特定程序从命令行读取包含二进制数的字符串(因此该字符串包含字符“0”和“1”),并通过首先转换“0”和“来将该二进制数转换为十进制数” 1' at *c_pt 为 0 和 1,然后将其添加到 n 中构建的十进制数。它通过从 0 开始,然后在每次迭代时将数字乘以 2(这只是将所有内容左移一位),然后添加下一个数字来实现这一点。因此,如果字符串包含 10101 ,它将遵循以下步骤:

number  = 0

input = 10101
pointer = ^
number = number*2 + *pointer = 0*2 + ('1'-'0') = 0*2 + 1 = 1 (in binary: 1)

input = 10101
pointer = ^
number = number*2 + *pointer = 1*2 + ('0'-'0') = 1*2 + 0 = 2 (in binary: 10)

input = 10101
pointer = ^
number = number*2 + *pointer = 2*2 + ('1'-'0') = 2*2 + 1 = 5 (in binary: 101)

input = 10101
pointer = ^
number = number*2 + *pointer = 5*2 + ('0'-'0') = 5*2 + 0 = 10 (in binary: 1010)

input = 10101
pointer = ^
number = number*2 + *pointer = 10*2 + ('1'-'0') = 10*2 + 1 = 21 (in binary: 10101)

关于c - 不懂的考试问答,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com