gpt4 book ai didi

c - 了解一些C代码

转载 作者:行者123 更新时间:2023-12-01 14:18:46 24 4
gpt4 key购买 nike

快速提问。我从来没有使用过 C。

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n, x;
printf( "How many disks? " );
scanf( "%d", &n );
printf("\n");
for (x=1; x < (1 << n); x++)
printf( "move from tower %i to tower %i.\n",(x&x-1)%3, ((x|x-1)+1)%3 );
return 0;
}

这是河内的迭代塔。 (x&x-1) 和 (x|x-1)+1 是什么意思?我认为 % 正在做模数。 %i 是一种在 C 中打印整数的方法吗?

谢谢

最佳答案

  1. &运算符,例如 *运算符1 可用于两种不同的用途,具体取决于它是用作二元 还是一元 运算符。
    1. 一元 &喜欢&varvar 的地址.这是将其传递给 scanf 所必需的.
    2. 二进制 &喜欢var & var是按位与,如项目#2。
      • 请注意间距并不重要。重要的是 & 的两边是否都有操作数.所以& var仍然是一元的 &var &var仍然是二进制 & .
  2. (x&x-1)正在与 x 进行按位与运算和 x-1 .
  3. (x|x-1)正在与 x 进行按位或运算和 x-1 .
  4. %表示模数。
  5. 1 << n正在按位向左移动 1 n位数
  6. %i您将其视为 printf 的第一个参数是指定下一个参数是 int 的格式符号,所以 printf可以正常打印(因为它自己不知道是什么类型,所以你要告诉它)。它与模数无关。可以看到很深入的定义 printf这里:http://pubs.opengroup.org/onlinepubs/9699919799/ (感谢 PMG)
    • 如果%i在字符串之外,它将位于其他操作数的左侧,并且是平均模数。
    • %i在一个字符串中本身并不意味着什么。它只对 printf 有意义因为printf特别对待它。它在它获取的字符串中搜索 %format 的出现(其中 format 是一种格式,而不是“格式”一词)并根据遇到的格式执行某些操作。

1 *运算符也有两个不同的版本:一元版本和二进制版本。一元版本表示指针间接,二进制版本表示乘法。

关于c - 了解一些C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230974/

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