相关疑难解决方法(0)

无符号和有符号整数的比较运算

请参阅此代码段

int main()
{ 
 unsigned int a = 1000;
 int b = -1;
 if (a>b) printf("A is BIG! %d\n", a-b);
 else printf("a is SMALL! %d\n", a-b); 
 return 0;
}   
Run Code Online (Sandbox Code Playgroud)

这给出了输出:a是SMALL:1001

我不明白这里发生了什么.>运算符如何在这里工作?为什么"a"小于"b"?如果它确实更小,为什么我得到一个正数(1001)作为差异?

c unsigned signed gcc

40
推荐指数
2
解决办法
4万
查看次数

一个谜语(在C中)

一位朋友给了我一个谜语:

#include<stdio.h>

#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
  int array[] = {23,34,12,17,204,99,16};

  int main()
  {
      int d;
      for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
          printf("%d\n",array[d+1]);
      getchar();
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码应该打印所有的数组元素,代码中的问题是什么(输出什么都没有)?我认为循环不会迭代一次?

我发现以下代码确实有效:

#include<stdio.h>



#define TOTAL_ELEMENTS ((sizeof(array) / sizeof(array[0])))
  int array[] = {23,34,12,17,204,99,16};

  int main()
  {
      int d;
      int x = (TOTAL_ELEMENTS-2);
      for(d=-1;d <= x;d++)
          printf("%d\n",array[d+1]);
      getchar();
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

我有一个理论认为它与宏有关,但我不能指责问题.

c

16
推荐指数
2
解决办法
2656
查看次数

为什么'for'循环条件失败?

在下面显示的代码中,没有任何内容被打印,这意味着for循环中的条件失败.可能是什么原因?

我想知道,因为当我TOTAL_ELEMENTS单独打印时,它给出了5,所以它必须是5-2=3 => -1<=3,所以它应该打印一些东西.

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

int array[] = { 23, 34, 12, 17, 204, 99, 16 };
int main()
{
    int d;

    for (d = -1; d <= (TOTAL_ELEMENTS - 2); d++) {
        printf("%d\n", array[d + 1]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释这段代码吗?

c type-conversion implicit-conversion c-preprocessor

12
推荐指数
3
解决办法
1687
查看次数

对C宏扩展和整数运算感到困惑

可能重复:
一个谜语(在C中)

关于以下代码段,我有几个问题:

#include<stdio.h>

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {23,34,12,17,204,99,16};

int main()
{
int d;

for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里代码的输出不会按预期打印数组元素.但是当我添加一个(int)的类型转换时,ELEMENTS的宏定义为

 #define TOTAL_ELEMENTS (int) (sizeof(array) / sizeof(array[0]))
Run Code Online (Sandbox Code Playgroud)

它按预期显示所有数组元素.

  • 这种类型转换是如何工作的?

基于此,我有几个问题:

  • 如果我有一些宏定义,这是否意味着:

    #define AA (-64)

默认情况下,在C中,所有定义为宏的常量都等同于signed int.

如果是,那么

  • 但是,如果我必须强制在宏中定义一些常量,因为unsigned int是否有任何常量后缀而不是我可以使用(我试过UL,UD既不起作用)?

  • 如何在宏定义中定义常量以表现为unsigned int?

c macros c-preprocessor

3
推荐指数
2
解决办法
8463
查看次数

打印数组元素

以下C程序的预期输出是打印数组元素.但是当实际运行时,它不会这样做.

#include<stdio.h>

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))

int array[] = {23,34,12,17,204,99,16};

int main()
{
    int d;

    for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
        printf("%d\n",array[d+1]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是什么原因 ?

c arrays

3
推荐指数
2
解决办法
2万
查看次数

以下C代码有什么问题?

可能重复:
对C宏扩展和整数运算感到困惑
一个谜语(在C中)

以下C程序的预期输出是打印数组中的元素.但是当实际运行时,它不会这样做.

#include<stdio.h>

  #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
  int array[] = {23,34,12,17,204,99,16};
  int main() 
  {
      int d;
      for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
          printf("%d\n",array[d+1]);
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

c arrays c-preprocessor

0
推荐指数
1
解决办法
419
查看次数