什么是javascript中的>>> 0?

Nea*_*vis 3 javascript tiff libtiff

我在github上使用seikichi的一个名为tiff.js的LibTIFF C代码的编译Emscripten端口.在我的代码中,我需要获得一些TIFF标签.在tiff.js中,您可以调用tiff.getField(标记值).我需要的一个标签是ROWSPERSTRIP,它是278所以要得到这个标签,我打电话如下:

var rps = tiff.getField(278); //return rows per strip tiff tag
Run Code Online (Sandbox Code Playgroud)

这似乎适用于一些较小的值1到176(不完全确定吗?)但我有几个文件,AsTiffTagViewer报告为每个条带224行和一个文件,每个条带746行.但是,tiff.js会将这两个值分别错误地报告为6和1.我正在逐步调试tiff.js中的调试器并注意它来到一个包含以下代码的地方:

do{if(b>>>0<=65535){d=e[j+24>>1]|0;if((1<<(d&31)&c[a+40+(d>>>5<<2)>>2)]|0)==0){k=0}else{break}i=f;return k|0}}while(0);
Run Code Online (Sandbox Code Playgroud)

我怀疑它是丑陋的,因为它最好的Emscripten可以用C代码.现在我知道">>"和"<<"做了什么,但我似乎无法找到关于">>>"的任何内容.我还没有任何想法,如果这是tiff.js中的代码部分导致tiff.getField(278)不能错误地返回每个条带值的一些较大的行(我现在所知道的是它看起来更小的行数条带值会正确返回,而较大的条带值未正确返回它会出现.

所以我的主要问题是什么是">>>",我的第二个问题是,是否有人对tiff.getField(278)可能无法正确处理较大值的原因有任何想法.注意:大多数其他基本TIFF标记确实返回正确的值,如tiff.getField(PHOTOMETRIC)和tiff.getField(SAMPLESPERPIXLE)...等.

提前感谢您的想法

ade*_*neo 6

这是来自MDN的按位零填充右移

该运算符将第一个操作数向右移动指定的位数.向右移位的多余位被丢弃.零位从左侧移入.符号位变为0,因此结果始终为非负数.

对于非负数,零填充右移和符号传播右移产生相同的结果.例如,9 >>> 2产生2,与9 >> 2相同:

至于为什么tiff.js在你打电话时不起作用tiff.getField(278),我不知道,我认为应该这样,而且在Github页面上似乎没有任何已知问题,但你可以尝试添加一个问题,看看开发者是否知道.