小编Ree*_*Ree的帖子

在C中,如何计算无符号数量的负数

在K&R ANSI C书中,A.7.4.5节(一元减法运算符)中说明:

...无符号数量的负数是通过从提升类型的最大值中减去提升值并加1来计算的; ...

这究竟是如何计算出来的?你能举一个简短的例子吗?

我不知道这怎么会产生200u的负数:从任何整数类型(有符号或无符号)的最大值减去200,并且加1不会导致-200.

我知道一元减去了什么 - 问题是我没有看到根据描述如何计算结果.

c operators unary-operator

6
推荐指数
3
解决办法
2682
查看次数

计算浮点数据类型的范围

是否可以在不读取float.h和使用ANSI C的情况下以可移植的方式计算float,double和long double数据类型的范围?便携式,我的意思是包括目标机器不符合IEEE 754标准的情况.

我正在阅读K&R书,练习2-1要求我"计算"它们,所以我想这意味着完全避免使用float.h,其中包括FLT_MIN,FLT_MAX,DBL_MIN和DBL_MAX(直接读取这些值肯定不会归类为"计算" ").

c

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

问题编译K&R示例

我在编写本书第5.11节中介绍的示例程序时遇到了问题.我删除了大部分代码,只留下了相关内容.

#define MAXLINES 5000
char *lineptr[MAXLINES];

void qsort1(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);

main(int argc, char *argv[]) {
    int numeric = 1;
    /* ... */
    qsort1((void**) lineptr, 0, 100, (int (*)(void*, void*))(numeric ? numcmp : strcmp));
}

void qsort1(void *v[], int left, int right, int (*comp)(void *, void *)) {
    /* ... */
}

int numcmp(char *s1, char *s2) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

问题是代码无法编译(我正在使用Digital Mars编译器).我得到的错误是这样的:

        qsort1((void**) lineptr, 0, nlines …
Run Code Online (Sandbox Code Playgroud)

c

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

属性设置为false,但目标仍然执行

这是一个简单的Ant构建文件:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Project" default="build" basedir=".">
    <property name="compressAssets" value="false"/>

    <target name="build" depends="compress-assets"/>
    <target name="compress-assets" if="compressAssets">
        <echo message="executed"/>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

compressAssets设置为false,那么为什么compress-assets每次执行目标?注意if目标上的属性.

ant

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

为什么printf()输出-1表示大整数?

我正在阅读第二版K&R书籍,其中一个练习需要打印limits.h标题中定义的所有最大整数值.但是,这......

printf("unsigned int: 0 to %d\n", UINT_MAX);
Run Code Online (Sandbox Code Playgroud)

...输出以下内容:

unsigned int: 0 to -1
Run Code Online (Sandbox Code Playgroud)

我怎么得到-1?有谁能解释这种行为?

我在Vista上使用Digital Mars C编译器.

c

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

preg_replace - NULL 结果?

这是一个小示例(下载、重命名为 .php 并在 shell 中执行):

\n\n

测试.txt

\n\n

为什么preg_replace返回NULL而不是原始字符串?

\n\n

\\x{2192}与 HTML“ ”(“\xe2\x86\x92”)相同&rarr;

\n

php pcre

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

从InputStream读取行而不进行缓冲

Java是否有一种简单的方法无需缓冲就可以从InputStream读取行?BufferedReader不适合我的需要,因为我需要通过同一连接反复传输文本和二进制数据,并且缓冲会妨碍您的工作。

java inputstream

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

爱丽丝和Python对于没有经验的人

我的兄弟想学习一些编程,以了解他是否喜欢这样做.他16岁,对计算机一般不太了解,对程序设计一无所知.

我正在考虑选择Alice或Python.我认为Think Python是经常推荐的读物,但对于初学者来说,它是不是有点太多(尺寸方面)?这当然不是太复杂,但我对我的兄弟并不那么乐观...... :)他能尝试的其他任何东西都会更小而且非常简单吗?

还有,有没有人有过爱丽丝的经历?我自己不会真的想以这种方式开始编程,但我可以看到为什么视觉方面可能对某些人更具吸引力.我只是不确定它是如何限制的,如果用于学习伪语言的时间不会更好地学习真正的语言.

编辑:谢谢你的回复.我想我们会选择Python.但是,正如我上面提到的,对于一个完整的"新手"来说,"Think Python"有点过于广泛吗?您可以推荐任何其他但更简单的Python编程介绍?

python alice

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

是否应该避免服务对象的动态依赖?

这个问题是关于主要基于价值对象和服务的可测试软件设计.

使用DI容器时,具有静态依赖关系的服务可以直接实例化或配置.但是,在某些情况下,服务需要仅在运行时已知的依赖项.

比如说,想象一个简单的FileSystemDataStore,其中包含一些用于管理目录中文件的CRUD方法.此服务需要一个目录名作为其构造函数参数之一.该名称只能在运行时知道,并且必须由其协作者提供.

这似乎有些问题,因为由于其动态特性,您无法在DI容器中配置此类服务.您可能必须使用工厂来创建此类服务.但是,这将导致服务客户的单元测试中的怪癖.您将不得不模拟工厂返回服务的模拟.这增加了单元测试的额外复杂性.返回嘲笑的模拟通常被认为是测试气味.

你对这个问题有什么看法?这是你的经历中的问题吗?这些服务应该重构为更"纯粹"吗?

language-agnostic unit-testing dependency-injection

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

注入很少使用的服务 - 构造函数 vs 方法

这个问题是关于主要基于价值对象和服务的可测试软件设计。

下面是一个可以将数据保存到文件的简单服务的 API 示例。

saveToFile(data, fileName)
saveToUniqueFile(data, fileNameGenerator)
Run Code Online (Sandbox Code Playgroud)

fileNameGenerator是一种生成随机文件名的服务。它用于查找唯一的文件名以保存数据。在这个例子中fileNameGenerator是作为方法参数注入的。

替代方法之一是构造函数注入,它可以简化 API:

saveToFile(data, fileName)
saveToUniqueFile(data)
Run Code Online (Sandbox Code Playgroud)

保存到唯一文件肯定不会每次都使用,因此似乎不需要强制构造函数参数。另一方面,服务通常通过数据进行通信,这里我们有一个服务,它确实使 API 有点混乱。

将服务作为方法参数传递是否有任何潜在的问题/不便?在这种情况下,构造函数注入仍然是首选吗?

language-agnostic dependency-injection

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

非贪婪的正则表达式贪婪地行动

这是一个简单的例子:

文本: <input name="zzz" value="18754" type="hidden"><input name="zzz" value="18311" type="hidden"><input name="zzz" value="17138" type="hidden">

正则表达式: /<input.*?value="(18754|17138)".*?>/

当匹配由空字符串替换时,结果为空字符串.我期待中间<input>保持,因为我使用非贪婪匹配(.*?).任何人都可以解释为什么它被删除?

regex

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

修改指针指向的字符串是否有效?

这是一个连接两个字符串的程序的简单示例.

#include <stdio.h>

void strcat(char *s, char *t);

void strcat(char *s, char *t) {
    while (*s++ != '\0');
    s--;
    while ((*s++ = *t++) != '\0');
}

int main() {
    char *s = "hello";
    strcat(s, " world");
    while (*s != '\0') {
        putchar(*s++);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么它有效.在main()中,我有一个指向字符串"hello"的指针.根据K&R的书,修改这样的字符串是未定义的行为.那么为什么程序能够通过追加"世界"来修改它呢?或者是否附加不被视为修改?

c

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