Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon.

Pages: 1-

Bitwise shift

Name: Anonymous 2008-12-22 15:32

I'm bitwise shifting integers(optimized algorithms).
The problem is when they switch unsigned/signed representation and the results are wrong.Can anyone explain how to fix this?

Name: Anonymous 2008-12-22 15:41

No.

Name: Anonymous 2008-12-22 15:42

Use logical shift, not arithmetic shift.

Name: Anonymous 2008-12-22 15:42

>>1
Could you give an example of what you mean by "when they switch representation"? Usually an integer is either one or the other.

Name: Anonymous 2008-12-22 15:58

>>1
STICK TO ADD AND SUBTRACT NOOBFAG

Name: Anonymous 2008-12-22 16:10

And don't forget your -fOMG_OPTIMIZED

Name: Anonymous 2008-12-22 16:47

Op: What CFlags are you using? Have you tried compiling your code on any type of a SPARC processor to be sure? I ask this because SPARCS use different indian bits, so you might not run into these problems. Or you might get different ones, I'm not sure. As an undergraduate Computer Science Student, I don't get to interact with SPARC processors. In fact, all I get to use is Scheme. I'm posting this from my Schemeing rig as a matter of fact.

Name: Anonymous 2008-12-22 17:10

Obviously OP needs to be using bignums. This is the standard, enterprise-quality, failsafe numerical analysis technique. Such primitive notions as fixed-bit-width numbers have been obsolete for years.

Name: Anonymous 2008-12-22 17:19

You need this book.
http://www.hackersdelight.org/

Name: Anonymous 2008-12-22 19:39

>>1
Can anyone explain how to fix this?
Yes, I can.  Now fuck off.

Name: Anonymous 2008-12-22 20:46

>>7
               /\___/ヽ
              /''''''   '''''':::::::\
             . |(●),   、(●)、.:| +
             |   ,,ノ(、_, )ヽ、,, .::::|    
           .   |   `-=ニ=- ' .:::::::| + ``INDIAN BITS''
              \  `ニニ´  .:::::/ 
               \\ , /, :/
                 \ヽリ/ ,/
                  ,l//
                  〈/〉
                  〈/〉
                  〈/〉
                  〈/〉、
                 .//ハ\
               /// ′\\
              /::::::˙  ´ニニ`  \              
            + |:::::::::˙ , -=ニ=-`  |   ˙           
              |::::˙ ''、ヽ( '~、)ノ''   |             
           + |:˙、(●)、   '(●)| ˙             
              \:::::::,,,,,,   ,,,,,,/        
               \/~~~~\/

Name: Anonymous 2008-12-22 20:50

               /\___/ヽ
              /''''''   '''''':::::::\
             . |(●),   、(●)、.:| +
             |   ,,ノ(、_, )ヽ、,, .::::|    
           .   |   `-=ニ=- ' .:::::::| + ``HAX MY ANUS''
              \  `ニニ´  .:::::/ 
               \\ , /, :/
                 \ヽリ/ ,/
                  ,l//
                  〈/〉
                  〈/〉
                  〈/〉
                  〈/〉、
                 .//ハ\
               /// ′\\
              /::::::˙  ´ニニ`  \              
            + |:::::::::˙ , -=ニ=-`  |   ˙           
              |::::˙ ''、ヽ( '~、)ノ''   |             
           + |:˙、(●)、   '(●)| ˙             
              \:::::::,,,,,,   ,,,,,,/        
               \/~~~~\/

Name: Anonymous 2008-12-23 5:52

int to string base2,sign bit is char0.

Name: Anonymous 2008-12-23 5:56


               /\___/ヽ
              /''''''   '''''':::::::\
             . |(●),   、(●)、.:| +
             |   ,,ノ(、_, )ヽ、,, .::::|    
           .   |   `-=ニ=- ' .:::::::| + ``ETHERNET''
              \  `ニニ´  .:::::/ 
               \\ , /, :/
                 \ヽリ/ ,/
                  ,l//
                  〈/〉
                  〈/〉
                  〈/〉
                  〈/〉、
                 .//ハ\
               /// ′\\
              /::::::˙  ´ニニ`  \              
            + |:::::::::˙ , -=ニ=-`  |   ˙           
              |::::˙ ''、ヽ( '~、)ノ''   |             
              \  `ニニ´  .:::::/ 
               \\ , /, :/
                 \ヽリ/ ,/
                  ,l//
                  〈/〉
                  〈/〉
                  〈/〉
                  〈/〉、
                 .//ハ\
               /// ′\\
              /::::::˙  ´ニニ`  \              
           + |:˙、(●)、   '(●)| ˙             
              \  `ニニ´  .:::::/ 
               \\ , /, :/
                 \ヽリ/ ,/
                  ,l//
                  〈/〉
                  〈/〉
                  〈/〉
                  〈/〉、
                 .//ハ\
               /// ′\\
              /::::::˙  ´ニニ`  \              
             |   ,,ノ(、_, )ヽ、,, .::::|    
           + |:˙、(●)、   '(●)| ˙             
              \:::::::,,,,,,   ,,,,,,/        
               \/~~~~\/

Name: Anonymous 2008-12-23 11:49

Nevermind i decided to use another version:
it doesn't use any regular shifts,but it get right results every time.

function cshr(value,shift){ 
var txt=value.toString(2);
var txl=32-txt.length;
switch(txl){
case 1:;var adds='0'+txt;break;
case 2:;var adds='00'+txt;break;
case 3:;var adds='000'+txt;break;
case 4:;var adds='0000'+txt;break;
case 5:;var adds='00000'+txt;break;
case 6:;var adds='000000'+txt;break;
case 7:;var adds='0000000'+txt;break;
case 8:;var adds='00000000'+txt;break;
case 9:;var adds='000000000'+txt;break;
case 10:;var adds='0000000000'+txt;break;
case 11:;var adds='00000000000'+txt;break;
case 12:;var adds='000000000000'+txt;break;
case 13:;var adds='0000000000000'+txt;break;
case 14:;var adds='00000000000000'+txt;break;
case 15:;var adds='000000000000000'+txt;break;
case 16:;var adds='0000000000000000'+txt;break;
case 17:;var adds='00000000000000000'+txt;break;
case 18:;var adds='000000000000000000'+txt;break;
case 19:;var adds='0000000000000000000'+txt;break;
case 20:;var adds='00000000000000000000'+txt;break;
case 21:;var adds='000000000000000000000'+txt;break;
case 22:;var adds='0000000000000000000000'+txt;break;
case 23:;var adds='00000000000000000000000'+txt;break;
case 24:;var adds='000000000000000000000000'+txt;break;
case 25:;var adds='0000000000000000000000000'+txt;break;
case 26:;var adds='00000000000000000000000000'+txt;break;
case 27:;var adds='000000000000000000000000000'+txt;break;
case 28:;var adds='0000000000000000000000000000'+txt;break;
case 29:;var adds='00000000000000000000000000000'+txt;break;
case 30:;var adds='000000000000000000000000000000'+txt;break;
case 31:;var adds='0000000000000000000000000000000'+txt;break;
case 32:;var adds='00000000000000000000000000000000'+txt;break;
default:var adds=txt;break;
}

switch(parseInt(shift)){
case 0:;var shf=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];break;
case 1:;var shf=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0];break;
case 2:;var shf=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1];break;
case 3:;var shf=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2];break;
case 4:;var shf=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3];break;
case 5:;var shf=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4];break;
case 6:;var shf=[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5];break;
case 7:;var shf=[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6];break;
case 8:;var shf=[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7];break;
case 9:;var shf=[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8];break;
case 10:;var shf=[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9];break;
case 11:;var shf=[11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10];break;
case 12:;var shf=[12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11];break;
case 13:;var shf=[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12];break;
case 14:;var shf=[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13];break;
case 15:;var shf=[15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];break;
case 16:;var shf=[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];break;
case 17:;var shf=[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];break;
case 18:;var shf=[18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];break;
case 19:;var shf=[19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];break;
case 20:;var shf=[20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];break;
case 21:;var shf=[21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];break;
case 22:;var shf=[22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];break;
case 23:;var shf=[23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22];break;
case 24:;var shf=[24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];break;
case 25:;var shf=[25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24];break;
case 26:;var shf=[26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];break;
case 27:;var shf=[27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26];break;
case 28:;var shf=[28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27];break;
case 29:;var shf=[29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28];break;
case 30:;var shf=[30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29];break;
case 31:;var shf=[31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];break;
default:var shf=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];break;
};

var resar=[];
for(var i=0;i<32;i++){
resar[i]=txt[shf[i]]}
return parseInt(resar.join(""),2)
 }

Name: Anonymous 2008-12-23 11:52

>>15
MY EYES BLEED

Name: Anonymous 2008-12-23 11:58

Its not optimized enough;
var resar=[txt[shf[0]],txt[shf[1]],txt[shf[2]],txt[shf[3]],txt[shf[4]],txt[shf[5]],txt[shf[6]],txt[shf[7]],txt[shf[8]],txt[shf[9]],txt[shf[10]],txt[shf[11]],txt[shf[12]],txt[shf[13]],txt[shf[14]],txt[shf[15]],txt[shf[16]],txt[shf[17]],txt[shf[18]],txt[shf[19]],txt[shf[20]],txt[shf[21]],txt[shf[22]],txt[shf[23]],txt[shf[24]],txt[shf[25]],txt[shf[26]],txt[shf[27]],txt[shf[28]],txt[shf[29]],txt[shf[30]],txt[shf[31]]]
unrolls the for loop

Name: Anonymous 2008-12-23 11:59

200 milliseconds faster.

Name: Anonymous 2008-12-23 12:06

>>18
It could save your life.

Name: Anonymous 2008-12-23 12:31

//further optimized
function cshr(value,shift,back){ 
//circular shift,with left shift(back)
var txt=value.toString(2);
var txl=32-txt.length;
switch(txl){
case 1:;var txt='0'+txt;break;
case 2:;var txt='00'+txt;break;
case 3:;var txt='000'+txt;break;
case 4:;var txt='0000'+txt;break;
case 5:;var txt='00000'+txt;break;
case 6:;var txt='000000'+txt;break;
case 7:;var txt='0000000'+txt;break;
case 8:;var txt='00000000'+txt;break;
case 9:;var txt='000000000'+txt;break;
case 10:;var txt='0000000000'+txt;break;
case 11:;var txt='00000000000'+txt;break;
case 12:;var txt='000000000000'+txt;break;
case 13:;var txt='0000000000000'+txt;break;
case 14:;var txt='00000000000000'+txt;break;
case 15:;var txt='000000000000000'+txt;break;
case 16:;var txt='0000000000000000'+txt;break;
case 17:;var txt='00000000000000000'+txt;break;
case 18:;var txt='000000000000000000'+txt;break;
case 19:;var txt='0000000000000000000'+txt;break;
case 20:;var txt='00000000000000000000'+txt;break;
case 21:;var txt='000000000000000000000'+txt;break;
case 22:;var txt='0000000000000000000000'+txt;break;
case 23:;var txt='00000000000000000000000'+txt;break;
case 24:;var txt='000000000000000000000000'+txt;break;
case 25:;var txt='0000000000000000000000000'+txt;break;
case 26:;var txt='00000000000000000000000000'+txt;break;
case 27:;var txt='000000000000000000000000000'+txt;break;
case 28:;var txt='0000000000000000000000000000'+txt;break;
case 29:;var txt='00000000000000000000000000000'+txt;break;
case 30:;var txt='000000000000000000000000000000'+txt;break;
case 31:;var txt='0000000000000000000000000000000'+txt;break;
case 32:;var txt='00000000000000000000000000000000'+txt;break;
default:break;
}
if(back){var sh=32-parseInt(shift)}else{var sh=parseInt(shift)}
switch(sh){
case 0:;var shf=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];break;
case 1:;var shf=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0];break;
case 2:;var shf=[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1];break;
case 3:;var shf=[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2];break;
case 4:;var shf=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3];break;
case 5:;var shf=[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4];break;
case 6:;var shf=[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5];break;
case 7:;var shf=[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6];break;
case 8:;var shf=[8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7];break;
case 9:;var shf=[9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8];break;
case 10:;var shf=[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9];break;
case 11:;var shf=[11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10];break;
case 12:;var shf=[12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11];break;
case 13:;var shf=[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12];break;
case 14:;var shf=[14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13];break;
case 15:;var shf=[15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];break;
case 16:;var shf=[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];break;
case 17:;var shf=[17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];break;
case 18:;var shf=[18,19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17];break;
case 19:;var shf=[19,20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18];break;
case 20:;var shf=[20,21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];break;
case 21:;var shf=[21,22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];break;
case 22:;var shf=[22,23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];break;
case 23:;var shf=[23,24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22];break;
case 24:;var shf=[24,25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23];break;
case 25:;var shf=[25,26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24];break;
case 26:;var shf=[26,27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25];break;
case 27:;var shf=[27,28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26];break;
case 28:;var shf=[28,29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27];break;
case 29:;var shf=[29,30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28];break;
case 30:;var shf=[30,31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29];break;
case 31:;var shf=[31,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];break;
default:var shf=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31];break;
};

var resar=[txt[shf[0]],txt[shf[1]],txt[shf[2]],txt[shf[3]],txt[shf[4]],txt[shf[5]],txt[shf[6]],txt[shf[7]],txt[shf[8]],txt[shf[9]],txt[shf[10]],txt[shf[11]],txt[shf[12]],txt[shf[13]],txt[shf[14]],txt[shf[15]],txt[shf[16]],txt[shf[17]],txt[shf[18]],txt[shf[19]],txt[shf[20]],txt[shf[21]],txt[shf[22]],txt[shf[23]],txt[shf[24]],txt[shf[25]],txt[shf[26]],txt[shf[27]],txt[shf[28]],txt[shf[29]],txt[shf[30]],txt[shf[31]]]
return resar;
return parseInt(resar.join(""),2)
 }

Name: Anonymous 2008-12-23 13:01

//add this to Ensure ENTERPRISE QUALITY
//otherwise it wouldn't handle negative numbers
 if(value<0){value=value+2147483647}
 if(value<0){value=value+2147483647}
var txt=value.toString(2);

Name: Anonymous 2009-03-06 12:07

TROLLING saying that seriously read it and   it gets better   when I come   here and ask   if they found   in the disassembly.

Name: Anonymous 2009-08-16 22:30

Lain.

Don't change these.
Name: Email:
Entire Thread Thread List