小编Sha*_*our的帖子

有符号/无符号比较会产生意外结果

a是带符号的int并且包含-100 b是unsigned int并且包含500

a<b returns FALSE!!
Run Code Online (Sandbox Code Playgroud)

为什么到地球?:P

我可以将b转换为signed int并获得正确的结果,但是保持原样而不是结果让我感到惊讶,因为我不知道为什么-100 <500应该是假的,就像编译器转换为无符号类型一样自动(这显然不是程序员要求的).

如果我们保持原样,即第一个签名和第二个未签名,那么为什么要这样做

这真的很混乱.

现在我必须纠正我的所有代码,寻找有符号和无符号整数之间的比较,并将这两个变量转换为我的意思.: - /

在混合有符号和无符号类型时,我还需要注意其他任何情况吗?

请不要回答显而易见的"一般情况下使用无符号类型是不可取的,为什么不坚持只使用签名类型?你会更安全".谢谢.

干杯.

c c++ visual-c++

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

在参数问题中传递float

我需要传递浮点数并在程序中获取它.

我尝试了几种方法,但没有成功.这是我的代码:

#include <stdio.h>

int main (int argc, char *argv[])
{
    if(argc>1)
    {
        printf("String \t[%s]\n", argv[1] ); // 222

        float floatNumber = atof( argv[1] );

        printf("Float \t[%lf]\n", floatNumber ); //0.000000

        printf("Float \t[%f]\n", floatNumber );  //0.000000     

        double doubleValue = atof( argv[1] );

        printf("Double \t[%f]\n", doubleValue );  //0.000000    
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c

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

为什么文字的基础会影响其类型?

十进制数4294967295等于十六进制0xFFFFFFFF,所以我希望文字具有相同的类型,无论它表达的是什么基础,

std::is_same<decltype(0xFFFFFFFF), decltype(4294967295)>::value; //evaluates false
Run Code Online (Sandbox Code Playgroud)

似乎在我的编译器decltype(0xFFFFFFFF)unsigned int,decltype(4294967295)signed long.

c++ integer literals

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

没有构造函数的类强制使用指针类型?

我不想在没有必要时使用指针,但是这里有问题:在下面的代码中,如果我删除星号并level简单地做一个object,当然删除行level = new Level;我得到运行时错误,原因是其level然后被初始化在第一行,BEFORE initD3Dinit_pipeline-即设置用于在投影和视图中的方法.你看到的问题是level使用这两件事,但是当我第一次完成时,我得到一个null指针异常.

这只是一个答案是使用指针的情况吗?我之前遇到过这个问题,基本上看起来非常令人烦恼的是,当一个类类型不接受任何参数时,你基本上是在你声明它的地方初始化它......或者我对这最后一部分是错误的吗?

Level* level;

D3DMATRIX* matProjection,* matView;

//called once
void Initialise(HWND hWnd)
{
initD3D(hWnd);
    init_pipeline();

level = new Level;
}
Run Code Online (Sandbox Code Playgroud)

我是来自c#而在c#中,你只是在声明一个名字Level level; 是否参数,你仍然需要在某个时候初始化它.

c++

-1
推荐指数
1
解决办法
101
查看次数

C编译或/和解释?

关于"编译与解释"有很多答案和引文,我确实理解它们之间的差异.

说到C,我不确定.C是编译还是解释或两者兼而有之?如果你加上一些解释,我真的很感激.

c c++

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

如何在C中声明位?

我正在尝试这样做:

uint64_t key = 0110000010110110011001101111101000111111111010001011000110001110;
Run Code Online (Sandbox Code Playgroud)

不行.GCC

警告:整数常量对于其类型而言太大

知道为什么吗?

c gcc bit-manipulation literals

-1
推荐指数
1
解决办法
183
查看次数

预增量和后增量

今天我重新审视了Pre Increment和Post Increment.

我知道的基本定义.

预增量 - 增加值并返回值.

后递增 - 递增值并在递增之前返回值.

但是做一些他们的组合我很难过.

使用基本的C程序,这是我测试的.

最初i = 0.

第一次测试

printf("%d %d",++i,++i);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

2 2
Run Code Online (Sandbox Code Playgroud)

我期望:

1 2
Run Code Online (Sandbox Code Playgroud)

第二次测试

printf("%d %d",i++,i++);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

1 0
Run Code Online (Sandbox Code Playgroud)

我期望:

0 1
Run Code Online (Sandbox Code Playgroud)

第三次测试

printf("%d %d",i++,++i);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

1 2
Run Code Online (Sandbox Code Playgroud)

我期望:

0 2
Run Code Online (Sandbox Code Playgroud)

第四次测试

printf("%d %d",++i,i++);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

2 0
Run Code Online (Sandbox Code Playgroud)

我期望:

1 1
Run Code Online (Sandbox Code Playgroud)

我认为评估可能来自右侧或左侧.在Post增量的情况下,如果是Pre Increment,则可能是左边的.也许Pre Increment的优先级高于Post增量.一些与结果相匹配的想法,但在一次测试中做出的假设并不能解释其他输出.

c undefined-behavior pre-increment post-increment

-1
推荐指数
1
解决办法
789
查看次数

请解释为什么Java和C为此代码提供不同的答案

public class Test
{
    public static void main(String[] args) {
        int i = 10;
        i = i++;
        System.out.println("value of i is : " + i);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是: 10

当我执行类似的代码时C,输出是11.

c java

-2
推荐指数
2
解决办法
401
查看次数

奇怪的函数调用就像语法一样

我在C++文件中遇到过这个顶级函数.所以我的问题是:

  1. smt2::parser那里的类型声明究竟是什么?
  2. 这个功能叫做什么?
  3. 与普通电话有p(ctx, is, interactive);什么不同?

这是代码:

bool parse_smt2_commands(cmd_context & ctx, std::istream & is, bool interactive) {
    smt2::parser p(ctx, is, interactive);
    return p();
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,到目前为止我还没有找到p()grep 的定义.当我找到定义时,我会更新帖子(跟踪标题包括手动可能需要一段时间).

c++

-2
推荐指数
1
解决办法
138
查看次数

为什么负数通常需要括号来获得平方时的预期结果?

有人知道为什么负数需要括号的方式可以像人们在几种编程语言中所期望的那样,而不是在C语言中(或者在其他语言中)?

这是R中的一个例子:

> -5^2
[1] -25
> # now let's use parentheses
> (-5)^2
[1] 25  
Run Code Online (Sandbox Code Playgroud)

Python中也发生了同样的事情:

>>> -5**2
-25
>>> (-5)**2
25
Run Code Online (Sandbox Code Playgroud)

只是为了好玩,我们也可以在Ruby中尝试这个(使用http://repl.it/作为解释器):

 > 5**2
=> 25
 > -5**2
=> -25
 > (-5)**2
=> 25
Run Code Online (Sandbox Code Playgroud)

但是,如果我们在C中实现这个短程序,那么负数不需要括号正确平方:

#include <stdio.h>

int main(void){
  int number, product;
  printf("\nEnter the number you want squared: ");
  scanf("%d", &number);
  product = number * number;
  printf("Squared number: %d \n", product);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是C程序的输出:

Enter the number you want squared: 5
Squared number: 25 
Run Code Online (Sandbox Code Playgroud)

接下来,我将使用负数: …

c ruby python r operator-precedence

-3
推荐指数
1
解决办法
501
查看次数

表现:if(i == 0)与if(!i)

我正在编写(或者至少尝试编写)一些高性能的C++代码.我遇到了一个需要进行大量整数比较的部分,即检查结果是否等于零.

哪个更有效率?也就是说,这需要更少的处理器指令?

if (i == 0) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

要么

if (!i) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我在x86-64架构上运行它,如果这有任何区别的话.

c++ optimization performance

-3
推荐指数
1
解决办法
119
查看次数

什么是关于记忆的前瞻性声明?

我在高层次上理解函数声明的作用:在文件的顶部声明它们,以便编译器知道您正在调用哪些函数.但是,编译器究竟做了什么呢?我知道函数是写在内存的文本部分,并期望参数由堆栈上的寄存器给出.功能原型是否也放在文本中?或者是前向声明只是链接编辑器用于将所有文件连接在一起的指示器,它们在最终产品中被"删除"了吗?或者编译器是否对它们做了其他事情?

我在网上看了一下,找不到一个好的资源,所以如果你们中的任何人都可以回答这个问题,或者给我一个概述这个特定现象的资源,那将非常感谢!

编辑

我认为这个问题存在误解,这是我的错误.我的问题是C编译器如何使用前向声明.从下面的答案看来,它是在将c代码转换为汇编时使用的.它是否正确?

c c++ memory-model

-5
推荐指数
1
解决办法
110
查看次数

在C中使用逻辑OR(||)?

我是初学者C程序员,最近我和逻辑运营商合作.

||两个操作数均为零时,逻辑或()为零.或者工作有点不同?

它是如何工作的 ?有人可以详细解释一下!

c logical-operators

-11
推荐指数
1
解决办法
6374
查看次数