前几天我发现Node.js有一个叫做高分辨率计时器的函数
据说这个计时器具有纳秒级的分辨率,这很棒,因为现在我可以比使用Date模块更精确地计算时间.
无论如何我正在使用这个新的计时器来尝试创建一个Timer对象,可以将不同的任务传递给它.不幸的是,我得到一些奇怪的负面结果让我质疑这个假设的"高分辨率"计时器的准确性和可靠性.
让我告诉你我的代码:
hrTimer.js
//IMPORTS
var async = require('async');
HrTimer = {
time: function(task) {
var t1 = t2 = '';
async.series([
function(callback){
t1 = process.hrtime();
callback();
},
task,
function(callback){
t2 = process.hrtime();
callback();
}
]);
var t1 = t1[0].toString() + '.' + t1[1].toString();
var t2 = t2[0].toString() + '.' + t2[1].toString();
var dif = parseFloat(t2)-parseFloat(t1);
if(dif < 0){
debugger;
console.log(t1);
console.log(t2);
}
return dif;
}
};
module.exports = HrTimer;
Run Code Online (Sandbox Code Playgroud)
因此,有时它会进入代码块,其中dif <0.如果异步模块工作正常,并且计时器正常工作,则不会发生这种情况.有帮助吗?
我试图将值移位0xFFFFFFFF32位,如果我写的话它正确地变为0
x = x << 32;
Run Code Online (Sandbox Code Playgroud)
但它保持不变 0xFFFFFFFF
我写的时候:
x = x << y
Run Code Online (Sandbox Code Playgroud)
什么时候 y = 32
我根本不明白这一点.
我需要能够使用一个变量,对于一个转换的函数 32 - n
编辑
如果<< 32是未定义的,那么我真的无法想出一种方法来创建一个用1来填充n - 高位的函数
我试图通过仅使用按位运算符在C中实现rotateRight by n函数.
到目前为止,我已经决定使用它了.
y = x >> n
z = x << (32 - n)
g = y | z
Run Code Online (Sandbox Code Playgroud)
所以以价值为例 11010011
如果我试着`rotateRight(5):
y 变 11111110
z 变 01100000
然后g成为111111110
但是应该是正确的答案 10011110
这几乎可以工作,但问题是当我需要它来执行逻辑移位时右移复制符号位,所以我的一些答案是他们应该是什么的负面.我怎样才能解决这个问题?
注意 我无法使用强制转换或无符号类型
我试图了解这条线的工作原理:
lea (%eax, %eax, 4), %eax
Run Code Online (Sandbox Code Playgroud)
所以看起来这基本上说:
%eax = 5* %eax
Run Code Online (Sandbox Code Playgroud)
但LEA是签名还是未签名?
我正在尝试将我的管道命令的输出分配给csh脚本中的变量.
命令是:
set VAR="`ping $1 2>&1 | grep 'unknown' | cut -b 7-13`"
Run Code Online (Sandbox Code Playgroud)
但是,这不想工作.我得到了一个模糊的"不明确的输出重定向".
我迷路了,因为当我在终端输入它时命令本身有效,我可以看到文本 unknown
好吧,我有一些类型的定义:
typedef struct {
int validBit
int pageNumber
} PT_ENTRY;
typedef struct {
PT_ENTRY entry[128];
} PT;
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我尝试:
PT pt = {};
int i;
for(i=0;i<128;i++){
pt.entry[i] = malloc(sizeof(PT_ENTRY));
}
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
Incompatible types in assignment.
Run Code Online (Sandbox Code Playgroud)
所以我很困惑,因为我认为我昨天完成了同样的事情而且工作正常,然后我改变了我的代码但决定改回来.
pt.entry不是一个指针数组?我在这里错过了什么?
或者更好的是,创建包含128个结构数组PT_ENTRY的结构PT的最佳和最快方法是什么?