小编Dan*_*ner的帖子

区分零和负零C++

我在我的代码中遇到一个函数返回一个double的情况,并且这个double可能完全是零,负零或其他值.我需要区分零和负零,但默认的双重比较不会.由于双精度的格式,C++不允许使用按位运算符比较双精度,所以我不确定如何进行.我该如何区分这两者?

c++ floating-point comparison zero negative-number

8
推荐指数
2
解决办法
3226
查看次数

C++ - 初始化中的静态分配

说我有一个C++函数:

void foo(int x) {
    static int bar = x;
}
Run Code Online (Sandbox Code Playgroud)

如果我打电话foo(3)然后打电话foo(4),我的理解是吧的价值仍然是3.这是为什么?我理解为什么初始化的内存分配部分是多余的.但为什么这项任务也被忽略了?

c++ static

5
推荐指数
2
解决办法
2086
查看次数

C#多态和方法继承

考虑以下类:

public class X {};
public class Y : X {};
public class Z : X {};

public class A {
    public bool foo (X bar) { 
        return false;
    }
};

public class B : A { 
    public bool foo (Y bar) { 
       return true;
    }
};    

public class C : A { 
    public bool foo (Z bar) { 
       return true;
    }
};
Run Code Online (Sandbox Code Playgroud)

有没有办法实现以下所需的输出?

A obj1 = new B();
A obj2 = new C();

obj1.foo(new Y()); // This should run …
Run Code Online (Sandbox Code Playgroud)

c# polymorphism

4
推荐指数
1
解决办法
105
查看次数

无法确定字符串末尾的字符值

我是C编程的新手.我正在尝试制作一个需要一些简单输入的程序.但是我发现,在将输入字符串与用户"意味着"输入的内容进行比较时,最后会有一个额外的字符.我认为这可能是'\ 0'或'\ r',但似乎并非如此.这是我的代码片段:

char* getUserInput(char* command, char $MYPATH[])
{
    printf("myshell$ ");
    fgets(command, 200, stdin);
    printf("%u\n", (unsigned)strlen(command));

    if ((command[(unsigned)strlen(command) - 1] == '\0') || (command[(unsigned)strlen(command) - 1] == '\r'))
    {
        printf("bye\n");
    }

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

代码显示输入时,说"退出"输入5个字符.但是,我似乎无法弄清楚最后一个的身份."再见"从不打印.有谁知道这个神秘人物会是什么?

c string

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

将const char*传递给C中的函数

我正在尝试编写一个该函数const char *作为参数,我无法弄清楚如何以有用的方式将这种数据传递给函数.如果我有功能:

void tokenize(const char * c) { }
Run Code Online (Sandbox Code Playgroud)

我想用硬编码的值来调用这个函数,比如说反斜杠,这个问题的最佳方法是什么?如何将硬编码值转换为const char *

c const char

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

C++ - 了解引用和内存地址

我看过一些参考和内存地址之间的技术差异在这里,但我试图找到一个更抽象的方式来了解他们.考虑一下代码:

char foo = 'a';
char& bar = foo;
char& bar2 = *(char*)(&foo);
cout << bar << endl;
cout << bar2 << endl;
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出都是'a'.那么从这里得出的结论是,引用(bar2)只是一个带有关联类型(char)的内存地址(&foo)吗?或者这种解释是否分崩离析?

c++ memory reference

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

8086中断21H问题

我觉得好像我不理解8086汇编中断21H的功能0AH.我阅读了语法教程,例如:

"缓冲区的第一个字节指定它可以容纳的最大字符数(1到255).该值必须由用户提供.缓冲区的第二个字节由DOS设置为实际读取的字符数,不包括终止返回."

所以我尝试了一个非常基本的代码.

mov dh, 01
mov ah, 0AH
int 21H
Run Code Online (Sandbox Code Playgroud)

我运行这个程序,输入一个数值,然后按回车键.然而,Debug显示我的寄存器都没有从此操作中更改.我不知道在哪里,如果有的话,我输入的值被存储.有人可以帮我弄这个吗?

x86 assembly dos x86-16

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

FCOM浮点比较失败

我刚刚开始使用32位汇编,我很困惑。我有以下代码:

.586
.MODEL FLAT

.STACK 4096

.DATA

.CODE
main PROC

finit
fldpi
fld1
fcom
fstsw ax
sahf
JL jumper

nop

jumper:
nop

nop
main ENDP
END
Run Code Online (Sandbox Code Playgroud)

现在,据我了解,我将pi压入堆栈,然后将1压入堆栈,它应该比较pi和1并看到1较小,然后执行跳转。但是,比较似乎不起作用。有人可以帮忙吗?

x86 assembly x87

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

对UTF-16和UTF-32的困惑

据我所知,UTF-16和UTF-32之间的主要区别在于UTF-32每个字符总是四个字节,而UTF-16有时是一个字节,有时每个字符有两个字节.这使得UTF-16具有比UTF-32占用更少内存的优势,但UTF-32具有第n个字符的恒定时间访问的优点.

我的问题是,如果你能用UTF-16中最多两个字节表示每个unicode字符,那么为什么不存在总是使用两个字节来编码每个字符的格式呢?这种格式虽然比UTF-16稍贵一些内存,但通过在使用一半内存时允许恒定时间访问,将严格优于UTF-32.

我的误会是什么?

memory unicode encoding utf

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

查找添加到总和的整数组合

我试图写一个程序,它的声明X + Y = Sum,并可以查询到的可能输出值XY给定一个Sum.X和Y中的每一个都可以是[0,Sum]中的整数.例如,因为X + Y = 10,我想得到(0,10),(1,9),......,(10,0).

怎么能在Prolog中完成?

prolog

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