小编Yat*_*ore的帖子

为什么memmove()函数以这种方式工作?

我正在浏览memmove()memcpy()Stack Overflow 相关的各种问题.

这篇文章暗示如果源地址(要复制的数据)大于目标地址(要复制的数据),它将执行正向复制,否则将执行向后复制.

为什么会那样?我尝试了两种情况下的复制,并且完美无缺,没有任何错误.

你能详细说明吗?我没理由.

编辑:这就是我的意思:

#include <memory.h> 
#include <string.h>
#include <stdio.h>

void *memmoveCustom(void *dest, const void *src, size_t n)
{
    unsigned char *pd = (unsigned char *)dest;
    const unsigned char *ps = (unsigned char *)src;
    if ( ps < pd )
        for (pd += n, ps += n; n--;)
            *--pd = *--ps;
    else
        while(n--)
            *pd++ = *ps++;
    return dest;
}

int main( void )
{
    printf( "The string: %s\n", str1 );

    memmoveCustom( str1 + …
Run Code Online (Sandbox Code Playgroud)

c memmove

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

printf() 将输出发送到缓冲区是什么意思?

我正在学习“C PRIMER PLUS”,有一个关于“OUTPUT FLUSHING”的话题。现在它说:

printf()语句将输出发送到称为缓冲区的中间存储器。每隔一段时间,缓冲区中的材料就会被发送到屏幕上。何时将输出从缓冲区发送到屏幕的标准 C 规则很明确:

  1. 当缓冲区已满时发送。
  2. 当遇到换行符时。
  3. 当有即将到来的输入时。

(将输出从缓冲区发送到屏幕或文件称为刷新缓冲区。)

现在,验证上述说法。我写了这个简单的程序:

#include<stdio.h>

int main(int argc, char** argv) {

printf("Hello World");

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

因此, printf() 既不包含新行,也不包含一些即将发生的输入(例如 scanf() 语句或任何其他输入语句)。那么为什么它会在输出屏幕上打印内容。

让我们假设第一个条件验证为真。缓冲区已满(这根本不可能发生)。牢记这一点,我将 printf() 中的语句截断为

printf("Hi");
Run Code Online (Sandbox Code Playgroud)

它仍然在控制台上打印语句。

那么这里有什么交易,上述所有条件都是错误的,但我仍然在屏幕上看到输出。你能详细说明一下吗。看来我在理解这个概念时犯了一个错误。任何帮助都受到高度赞赏。

编辑:正如一个非常有用的评论所建议的那样,可能在程序结束后执行 exit() 函数会导致所有缓冲区刷新,从而导致控制台上的输出。但是如果我们在执行 exit() 之前按住屏幕。像这样,

#include<stdio.h>

int main(int argc, char** argv) {

printf("Hello World!");
getchar();

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

它仍然在控制台上输出。

c

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

如何在CPU内部存储浮点数?

我是一个初学者,正在学习组装基础知识。现在,在阅读此问题时,我来到了这一段。它说明了如何将浮点数存储在内存中。

浮点数的指数是8位字段。为了允许存储大数或小数,将指数解释为正数或负数。实际指数是8位字段的值减去127。127是32位浮点数的“指数偏差”。浮点数的分数字段让人有些意外。由于将0.0定义为所有设置为0的位,因此无需担心将0.0表示为等于127的指数字段并将小数字段设置为所有O。所有其他数字至少具有一个1位,因此IEEE 754格式使用隐式1位来节省空间。因此,如果小数字段为00000000000000000000000,则将其解释为1。00000000000000000000000。这允许分数字段有效地为24位。

我一点都不明白。

您能解释一下它们如何存储在内存中吗?我不需要参考,我只需要一个很好的解释即可轻松理解。

floating-point assembly ieee-754

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

标签 统计

c ×2

assembly ×1

floating-point ×1

ieee-754 ×1

memmove ×1