小编aud*_*tic的帖子

在C中将double翻转为浮点数

这是一个非常简单的问题,但是一个重要问题,因为它极大地影响了我的整个项目.

假设我有以下代码snipet:

unsigned int x = 0xffffffff;
float f = (float)((double)x * (double)2.328306436538696e-010); //  x/2^32
Run Code Online (Sandbox Code Playgroud)

我希望它f像0.99999,但相反,它会向上舍入到1,因为它是最接近的float近似值.这不好,因为我需要float[0,1)区间的值,而不是[0,1].我确信这很简单,但我会感激一些帮助.

c floating-point precision double floating-accuracy

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

用VHDL编写寄存器文件

我正在尝试用VHDL编写寄存器文件.该文件包含16个64位寄存器.每个周期读取两个寄存器并写入一个寄存器(假设写入已启用).应该有一个数据旁路(转发),这样如果我们在一个周期内读取和写入同一个寄存器,那么刚写入的值就会直接转发到输出.

我的想法是在上升沿写入并在时钟的下降沿读取,以便在一个周期内完成此操作.但是,我的设计不起作用(不是我预期的,因为我不相信在检查上升沿的if块中检查下降沿将按预期工作).

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity register_file is   
    port
    (
    outA          : out std_logic_vector(63 downto 0);
    outB          : out std_logic_vector(63 downto 0);
    input         : in  std_logic_vector(63 downto 0);
    writeEnable   : in std_logic;
    regASel       : in std_logic_vector(5 downto 0);
    regBSel       : in std_logic_vector(5 downto 0);
    writeRegSel   : in std_logic_vector(5 downto 0);
    clk           : in std_logic
    );
end register_file;

architecture behavioral of register_file is
type registerFile is array(0 to 15) of std_logic_vector(63 downto 0);
signal registers : …
Run Code Online (Sandbox Code Playgroud)

vhdl hdl computer-architecture cpu-registers

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

从文件路径构建树,我的逻辑是否正确?

我正在尝试构建一个树,我想基于类似于下面的文件路径将父节点链接到子节点,其中世界是根:

    The World
    The World/Asia
    The World/Asia/Afghanistan
    The World/Asia/Iran
    The World/Asia/China";
Run Code Online (Sandbox Code Playgroud)

我想把它变成这个: 在此输入图像描述

我采取的方法如下.我想知道是否有人能帮助我指出正确的方向.我不确定我的逻辑是否正确?

 public void linkNodeToParent(String path, Node n)
{
    String[] pathNodes = path.split("/");
    Node parent = root;
    for(int i = 0; i < pathNodes.length; ++i)
    {
       for(int j = 0; j < parent.getChildren().size(); ++j)
       {
           if(parent.getChildren().get(j).getNodeName().equals(pathNodes[i]))
               parent = parent.getChildren().get(j);
       }
    }

}
Run Code Online (Sandbox Code Playgroud)

java tree tree-traversal data-structures

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

使用TLB设计虚拟内存

我遇到了以下问题,我不确定如何处理它:

考虑具有以下属性的虚拟内存系统:

·35位虚拟地址

·16 KB页面

·32位物理地址

假设该虚拟存储器系统用八路组关联TLB实现.TLB总共有256个TLB条目,每个TLB条目代表一个虚拟到物理页码转换.

64 KB数据高速缓存是双向组关联高速缓存.数据高速缓存的块大小为128字节.

显示虚拟到物理映射,其中的图形以类似于下图的方式绘制(但需要对此问题中指定的TLB和数据缓存进行所有必要的更改).

指定进出的所有字段和信号的宽度(以及完成的比较次数)TLB和每个存储器地址的数据高速缓存.

我对如何计算一些参数有一个想法,但除此之外,我迷失了.

例如,由于虚拟地址是35位宽,我知道我有2 ^ 35个可能的虚拟地址.

由于我有16KB页面(16*1KB = 2 ^ 4*2 ^ 10 = 2 ^ 14KB),我知道我必须有(3 ^ 35)/(2 ^ 14)= 2 ^ 21页表项.

最后,我知道我的缓存大小是64*1KB = 2 ^ 16字节的缓存.

但是在这些步骤之后我迷失了.任何帮助,将不胜感激.

数字

caching computer-architecture virtual-memory tlb

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

在C#XML注释中转义尖括号

我正在用以下签名编写一个简单的比较功能:

  /// <summary>
  /// Casts two unsigned integers to signed integers and compares them
  /// </summary>
  /// <param name="arg1">Left side of inequality</param>
  /// <param name="arg2">Right side of inequality</param>
  /// <returns>
  /// LESS_THAN if arg1    <----
  /// </returns>
  private static Inequality Compare(uint arg1, uint arg2)
Run Code Online (Sandbox Code Playgroud)

我想将文字不等式符号放在箭头所在的位置,而不会触发XML解析器。我怎样才能做到这一点?

.net c# comments visual-studio-2010 xml-comments

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

Visual Studio Code:从自动套用格式中排除文件的某些部分?

我正在处理一堆遗留的 C 代码,它们的格式到处都是,我想在工作时清理它们。但是,有一些部分我不想触及(或者我宁愿手动格式化(例如用作位字段的结构,并解释每个位在注释中代表什么)。我正在嵌入式环境中工作,因此,理解每个位代表什么很重要,并且保持良好的格式也很重要,但是,VS Code 中的 C-lang 格式化程序想要对这种东西做自己的事情。

如何从自动套用格式中排除文件的某些部分?

c c++ format text-formatting visual-studio-code

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

C预处理器可以执行算术吗?如果是,如何执行算术?

我正在为微控制器编写代码; 由于ATMega128没有硬件乘法器或分频器,因此这些操作必须在软件中完成,并且它们占用相当多的周期.但是,为了代码的可移植性和易用性,我宁愿不将预先计算的值硬编码到我的代码中.例如,我有许多依赖于系统时钟频率的任务.目前我的运行频率为16MHz,但我应该选择降低它,比如降低电池应用的功耗,我想改变一行代码而不是多行代码.

那么说,C预处理器可以计算算术表达式,然后将结果"粘贴"到我的代码中,而不是将原始表达式"粘贴"到代码中吗?如果是这样,我该怎么做呢?他们的编译器选项和我需要考虑的是什么?

注意:我想要计算的值是常量值,所以我没有理由认为这不是一个特征.

c compiler-construction compiler-optimization c-preprocessor

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

double free()有什么问题?

我一直在Web和我的Advanced C类中看到相当多的错误代码(例如下面的代码).虽然我明白这显然是糟糕的编码实践,但我很难知道除了浪费CPU周期之外它做得多么糟糕.根据我的理解,到目前为止,如果指针分配不在"malloc表"中(因为没有更好的单词),通常会被忽略.如果有人在这里可以让我更好地了解为什么这是坏事(除了事实上这是一件很愚蠢的事情)以及它的后果,我会很感激.

char* ptr = malloc(1);

...

free(ptr);
...
free(ptr);
Run Code Online (Sandbox Code Playgroud)

c memory free memory-management undefined-behavior

3
推荐指数
4
解决办法
1179
查看次数

使用unix shell测试系统的字节顺序

我是shell脚本的新手(字面意思是我的第一天),我正在使用它为我的一个类创建可移植的C代码.我想定义一个CPP指令,它将定义我正在编译的系统的字节顺序(无论是Solaris,BSD,Linux,OSX等,都有一点困难.

我当前脚本的关键是以下行:

printf '\1' | od -dAn;
Run Code Online (Sandbox Code Playgroud)

1为小端和256大端输出(我已经在我的所有系统上测试过,它似乎可以完成这项工作).

现在,当我将它添加到以下脚本时,它似乎不能很好地播放.

CONFIG_HRD="config.h"
ENDIAN=printf '\1' | od -dAn;

touch $CONFIG_HRD
if $ENDIAN -eq \1; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> $CONFIG_HRD
fi
Run Code Online (Sandbox Code Playgroud)

它失败并出现以下错误

./script.sh: line 2: \1: command not found
./script.sh: line 5: -eq: command not found
Run Code Online (Sandbox Code Playgroud)

如果有人能告诉我我做错了什么,我会很感激.谢谢

====== edit =======以下代码现在产生以下错误:

CONFIG_HRD="config.h"
ENDIAN=$(printf '\1' | od -dAn)

touch $CONFIG_HRD
if `$ENDIAN -eq 1`; then
    echo "#define LITTLE_ENDIAN" >> $CONFIG_HRD
else
    echo "#define BIG_ENDIAN" >> …
Run Code Online (Sandbox Code Playgroud)

c unix linux bash shell

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

设计一个可移植的makefile循环

我需要设计一个make文件,它将连续运行多个(类似命名的)程序.它还需要是可移植的,因为它将在CentOS和Solaris(非GNU)系统上使用.我之前从未真正使用过makefile中的循环.以下是我的尝试.不幸的是,它似乎只执行第一个程序.

CC = gcc
CFLAGS = -g -Wall #-Werror

SRCS  := $(wildcard *.c)
PROGS := $(SRCS:.c=)
OBJS  := $(SRCS:.c=.o)

all: $(PROGS)

run:    $(PROGS)
    $(foreach prog, $(PROGS), ./$(prog))

clean: $(PROGS)
    rm $(PROGS)
Run Code Online (Sandbox Code Playgroud)

这是make run从终端运行的结果

./prog-14  ./prog-17  ./prog-20  ./prog-13  ./prog-18  ./prog-06  ./prog-07  ./prog-04  ./prog-19  ./prog-11  ./prog-03  ./prog-08  ./prog-12  ./prog-16  ./prog-21  ./prog-01  ./prog-10  ./prog-15  ./prog-05  ./prog-09  ./prog-02
in program 14
Run Code Online (Sandbox Code Playgroud)

c loops makefile gnu-make

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

自动重新排序MFC控件ID

我有一个很老的MFC应用程序,多年来被很多人所感动(大多数人甚至可能都不是CS人),接下来,我喜欢称之为"无政府状态的设计模式".

无论如何,其中一个对话框有一系列56个垂直滑块和复选框.但是,对话框中还有其他滑块和复选框,如下所示.

在此输入图像描述

现在,问题是附加的滑块和复选框采用与对话框的滑块/复选框系列顺序排列的ID.我的任务是在系列中添加更多的滑块和复选框(在Slider Control组框的空白处)不幸的是,由于IDC_SLIDER57through IDC_SLIDER61已经在对话框中(复选框也是如此),现有的代码,如下面的代码段将打破:

pVSlider = (CSliderCtrl *)GetDlgItem(IDC_SLIDER1+i);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来修改资源文件而不手动执行?我见过一个名为ResOrg的第三方工具,看起来它会帮助我做我想要的,但软件有点贵,特别是因为我只会使用它一次.我想我可以试试这个演示,但限制可能会限制我.

仅供参考,我使用的是Visual C++ 6.0(是的......我知道,不要笑,这是强迫我的).

c++ resources mfc visual-studio visual-c++

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