Come si eseguono operazioni bit a bit nelle formule JMP?Salve, immagino che questo sia semplicemente un problema in cui non riesco a trovare l'opzione della formula corretta, ma come si eseguono operazioni bit a bit di base in una formula JMP?
ad esempio Ecco un esempio di Python che vorrei replicare in JMP: lambda x: ((((x>>1)&0x1))<<2)
grazie, Ross
Automazione e scriptingAccesso ai datiCombinazione e pulizia dei datiProgettazione di esperimentiRi: Come si eseguono operazioni bit a bit nelle formule JMP?JMP non dispone di operatori bit a bit nativi. Nel tuo esempio, proverei questo
// untested code for (((x>>1)&0x1))<<2
f = function( { x },
( mod( floor( x / 2 ), 2 ) == 1 ) * 4
}x>>1 (spostamento a destra 1) divide x per 2, &1 mantiene solo il bit più piccolo (zero/uno, pari/dispari) e <<2 (spostamento a sinistra 2) moltiplica per 4. (Supponendo che Python funzioni come C e non ho dimenticato ...)
Se ne hai molti, con posizioni di bit particolari, ecc., potresti voler cercare una libreria per la manipolazione dei bit. L'unico di cui sono a conoscenza è dentro 7 cose da sapere su Twitter e potrebbe non essere molto amichevole (file BITS.jsl nel file zip). Non ricordo esattamente cosa fa, ma sembra che stia risolvendo il problema trasformando un numero in una stringa di caratteri di 32 uno e zero, quindi combinando le stringhe utilizzando le regole logiche AND/OR/etc. Probabilmente mancano delle operazioni non necessarie. E sono abbastanza sicuro che la funzione HTTPRequest renderebbe il codice molto più semplice ora.
I numeri negativi possono essere davvero strani quando si eseguono i turni a destra. Il bit del segno può essere un problema.
Ri: Come si eseguono operazioni bit a bit nelle formule JMP?ehm...
Ho aggiunto una richiesta alla lista dei desideri: operazioni bit JSL
( @jthi già richiesto nel 2020)
Per ora, (Jmp18), qual è il modo più veloce per estrarre i 32 bit di un numero a 32 bit?
...per 10 milioni di righe?
n_rows = 100000;
dt = New Table( "test", Add Rows( n_rows ), New Column( "rand int", Set each value( Random Integer( 0, 4294967295 ) ) ) );
checkBit = Function( {x, bit},
(Mod( Floor( x / 2 ^ (0 + bit) ), 2 ) == 1)
);
t0 = HP Time();
For( i = 1, i <= 32, i++,
dt << New Column( "bit" || Char(i), Set each value( checkBit( :rand int, i ) ) )
);
Show( (HP Time() - t0) / 1000000 ); // references
//BITS:NUMTOBITS from https://community.jmp.com/t5/Uncharted/7-things-to-know-about-Twitter/ba-p/21000
// faster
getBits = Function( {x},
{result = {}, i},
For( i = 4294967296 / 2, i >= 1, i /= 2,
Insert Into(
result,
If( x >= i,
x = x - i;
1;
,
0
)
)
);
Transpose(Matrix(result));
);
// ~ factor 10 faster
getBits = Function( {x},
Transpose(Matrix(Transform Each({bit}, Words(Hex( x, Base( 2 ), Pad To( 32 ) ),""),Num(bit))));
);
//getBits(4294967295);
For( i = 1, i <= 32, i++,
New Column( "bit" || Char( i ) )
);
t0 = HP Time();
mat = J( n_rows, 32, 0 );
For( myrow = 1, myrow <= n_rows, myrow++,
mat[myrow, 0] = getBits( :rand int[myrow] )
);
dt[0, N Cols( dt ) - 31 :: N Cols( dt )] = mat;
Show( (HP Time() - t0) / 1000000 );Ri: Come si eseguono operazioni bit a bit nelle formule JMP?n_rows = 100000;
dt = New Table( "test", Add Rows( n_rows ), New Column( "rand int", Set each value( Random Integer( 0, 4294967295 ) ) ) );
t0 = HP Time();
data = dt[0, 1];
For( i = 1, i <= 32, i++,
dt << New Column( "bit" || Char( i ) );
dt[0,i + 1] = Mod( data, 2 );
data = Floor( data / 2 );
);
Show( (HP Time() - t0) / 1000000 );
Ciò sposta la maggior parte del loop nel codice C++. Se riesci a capire come farlo con una divisione, potresti accelerarlo ulteriormente. Potresti voler utilizzare b0 anziché b1 per il nome del bit meno significativo, quindi il suo valore è 2^0==1. Dipende cosa rappresentano i bit.
Ri: Come si eseguono operazioni bit a bit nelle formule JMP?Wow grande 
Ri: Come si eseguono operazioni bit a bit nelle formule JMP?Sviluppatori JMP:
Per favore, per favore, per favore, per favore, aggiungi operatori bit a bit a JSL. Analizzando i file di registro con campi bit (come bit di errore, bit di stato, ecc.), ho avuto così tante occasioni di utilizzare operatori bit a bit. Questa funzionalità può anche essere estesa rendendo la mappatura dei bit definita dall'utente un'opzione nelle proprietà della colonna (ad esempio bit 0 = porta aperta, bit1 = porta chiusa, ...) e quindi nel generatore di grafici, tracciando una singola variabile di colonna con mappatura di bit contro il tempo, potresti mostrare che tutti gli stati dei bit si invertono.
Ri: Come si eseguono operazioni bit a bit nelle formule JMP?ciao @BetaTreeCamel91 , hai votato?
Operazioni sui bit JSL