- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在寻找这个问题的答案,但找不到。我不是想将 ^ 用作幂运算符。
这是我的问题。我正在尝试从数字电视标准(物理层协议(protocol))复制交织器。这是一个学校项目。这是我目前在 C 中的代码:
#include <sys/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#include <stdbool.h>
#include <string.h>
#include <complex.h>
#include <math.h>
int main()
{
int Mmax = 32768;
int Nr = log10(Mmax)/log10(2);
printf("Nr = %i \n",Nr);
int Lfm = 42;
int i,j,k,l;
// Create array R'i
unsigned char Rli[Mmax][Nr];
for (i = 0; i < Mmax; i++)
memset(Rli[i], 0, sizeof(unsigned char)*(Nr));
for (i = 0; i < Mmax; i++)
{
for(j = 1; j < Nr; j++)
{
if(i == 0 || i == 1)
{
Rli[i][j] = 0;
}
else if(i == 2)
{
Rli[i][j] = 0;
if(j == Nr - 2)
Rli[i][j] = 1;
}
else
{
Rli[i][j+1] = Rli[i-1][j];
}
}
if(i > 2)
{
Rli[i][1] = (((Rli[i-1][14] ^ Rli[i-1][13] ) ^ Rli[i-1][12] ) ^ Rli[i-1][2]);
}
Rli[i][0] = 0;
}
// wire permutation for array R'i - creates array Ri
unsigned char Ri[Mmax][Nr];
for (i = 0; i < Mmax; i++)
memset(Ri[i], 0, sizeof(unsigned char)*(Nr));
for (i = 0; i < Mmax; i++)
{
Ri[i][1] = Rli[i][8]; //Rli[i][7];
Ri[i][2] = Rli[i][9]; //Rli[i][8];
Ri[i][3] = Rli[i][14]; //Rli[i][13];
Ri[i][4] = Rli[i][4]; //Rli[i][3];
Ri[i][5] = Rli[i][6]; //Rli[i][5];
Ri[i][6] = Rli[i][13]; //Rli[i][12];
Ri[i][7] = Rli[i][3]; //Rli[i][2];
Ri[i][8] = Rli[i][2]; //Rli[i][1];
Ri[i][9] = Rli[i][12]; //Rli[i][11];
Ri[i][10] = Rli[i][5]; //Rli[i][4];
Ri[i][11] = Rli[i][10]; //Rli[i][9];
Ri[i][12] = Rli[i][11]; //Rli[i][10];
Ri[i][13] = Rli[i][1]; //Rli[i][0];
Ri[i][14] = Rli[i][7]; //Rli[i][6];
}
// Offset generator Gk
int Gmax = floor(Lfm/2);
unsigned char Gk[Gmax][Nr];
for (i = 0; i < Gmax; i++)
memset(Gk[i], 0, sizeof(unsigned char)*Nr-1);
for (k = 0; k < Gmax; k++)
{
for(j = 0; j < Nr; j++)
{
if(k == 0)
{
Gk[k][j] = 1;
}
else
{
Gk[k][j+1] = Gk[k-1][j];
}
}
if(k > 0)
{
Gk[k][0] = ( Gk[k-1][14] ^ Gk[k-1][13] );
}
}
// interleaving sequence
int Ndata = 26303; // numero de data
unsigned char Hl[Ndata];
double H1[Ndata], H2[Ndata];
memset(Hl, 0, sizeof(unsigned char)*Ndata);
memset(H1, 0, sizeof(double)*Ndata);
memset(H2, 0, sizeof(double)*Ndata);
int p,indice;
// loop from page 107 of the physical layer protocol.
for (i = 0; i < Lfm; i++)
{
for (k = 0; k < Mmax; k++)
{
p = 0;
for (j = 0; j < Nr; j++) // sum
{
if(j >= 0 && j <= Nr - 2)
H1[p] += Ri[k][j]*pow(2,j);
else if(j >= 0 && j <= Nr - 1)
{
indice = floor(i/2);
H2[p] += Gk[indice][j]*pow(2,j);
}
}
/*****/ Hl[p] = ((i % 2)*pow(2,Nr-1) + H1[p] ) ^ H2[p]; /*****/
if (Hl[p] < Ndata)
p += 1;
}
}
当我尝试编译时,最后/*****/之间的行会产生错误。
freqint.c:146:43: error: invalid operands to binary ^ (have ‘double’ and ‘double’)
Hl[p] = ((i % 2)*pow(2,Nr-1) + H1[p] ) ^ H2[p];
我想在那里做异或运算,但我做不对。
我从 here 中获取这个.
交织序列在第107页的底部
如何编写我的代码来避免该错误消息并仍然执行 XOR?
最佳答案
如评论中所述,^
运算符不能用于 double
,但是您不需要使用 double
.
您正在使用两个返回 double
的函数, 即 pow
和 floor
.
每次调用pow
, 你通过 2
为基地。通过左移值 1
可以更有效地提高 2 的幂。由指数。
同样,每次调用floor
您将整数值除以 2
.由于整数除法会自动删除除法的余数(假设您只使用正值),因此调用 floor
不会给你买任何东西。
所以改变pow(2,x)
的所有实例至 (1 << x)
,并更改 floor(x/2)
的所有实例至 (x/2)
.然后你可以声明H1
和 H2
作为 unsigned int
的数组你将能够使用 XOR 运算符 ^
.
关于c - 错误 : invalid operands to binary ^ (have ‘double’ and ‘double’ ) - I'm not trying to use ^ as a power operator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896525/
我在优化 JOIN 以使用复合索引时遇到问题。我的查询是: SELECT p1.id, p1.category_id, p1.tag_id, i.rating FROM products p1
我有一个简单的 SQL 查询,我正在尝试对其进行优化以删除“使用位置;使用临时;使用文件排序”。 这是表格: CREATE TABLE `special_offers` ( `so_id` int
我有一个具有以下结构的应用程序表 app_id VARCHAR(32) NOT NULL, dormant VARCHAR(6) NOT NULL, user_id INT(10) NOT NULL
此查询的正确索引是什么。 我尝试为此查询提供不同的索引组合,但它仍在使用临时文件、文件排序等。 总表数据 - 7,60,346 产品= '连衣裙' - 总行数 = 122 554 CREATE TAB
为什么额外的是“使用where;使用索引”而不是“使用索引”。 CREATE TABLE `pre_count` ( `count_id`
我有一个包含大量记录的数据库,当我使用以下 SQL 加载页面时,速度非常慢。 SELECT goal.title, max(updates.date_updated) as update_sort F
我想知道 Using index condition 和 Using where 之间的区别;使用索引。我认为这两种方法都使用索引来获取第一个结果记录集,并使用 WHERE 条件进行过滤。 Q1。有什
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
I am using TypeScript 5.2 version, I have following setup:我使用的是TypeScript 5.2版本,我有以下设置: { "
mysql Ver 14.14 Distrib 5.1.58,用于使用 readline 5.1 的 redhat-linux-gnu (x86_64) 我正在接手一个旧项目。我被要求加快速度。我通过
在过去 10 多年左右的时间里,我一直打开数据库 (mysql) 的连接并保持打开状态,直到应用程序关闭。所有查询都在连接上执行。 现在,当我在 Servicestack 网页上看到示例时,我总是看到
我使用 MySQL 为我的站点构建了一个自定义论坛。列表页面本质上是一个包含以下列的表格:主题、上次更新和# Replies。 数据库表有以下列: id name body date topic_id
在mysql中解释的额外字段中你可以得到: 使用索引 使用where;使用索引 两者有什么区别? 为了更好地解释我的问题,我将使用下表: CREATE TABLE `test` ( `id` bi
我经常看到人们在其Haxe代码中使用关键字using。它似乎在import语句之后。 例如,我发现这是一个代码片段: import haxe.macro.Context; import haxe.ma
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
这个问题在这里已经有了答案: "reduce" or "apply" using logical functions in Clojure (2 个答案) 关闭 8 年前。 “and”似乎是一个宏,
我正在考虑在我的应用程序中使用注册表模式来存储指向某些应用程序窗口和 Pane 的弱指针。应用程序的一般结构如下所示。 该应用程序有一个 MainFrame 顶层窗口,其中有几个子 Pane 。可以有
奇怪的是:。似乎a是b或多或少被定义为id(A)==id(B)。用这种方式制造错误很容易:。有些名字出人意料地出现在Else块中。解决方法很简单,我们应该使用ext==‘.mp3’,但是如果ext表面
我遇到了一个我似乎无法解决的 MySQL 问题。为了能够快速执行用于报告目的的 GROUP BY 查询,我已经将几个表非规范化为以下内容(该表由其他表上的触发器维护,我已经同意了与此): DROP T
我是一名优秀的程序员,十分优秀!