You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.1 KiB
Java

Using the bitwise shift operators
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BitShift extends JFrame
{
public BitShift()
{
super( "Shifting bits" );
Container c = getContentPane();
c.setLayout( new FlowLayout() );
final JTextField bits = new JTextField( 33 );
c.add( new JLabel( "Integer to shift " ) );
final JTextField value = new JTextField( 12 );
value.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
int val = Integer.parseInt( value.getText() );
bits.setText( getBits( val ) );
}
} );
c.add( value );
bits.setEditable( false );
c.add( bits );
JButton left = new JButton( "<<" );
left.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
int val = Integer.parseInt( value.getText() );
val <<= 1;
value.setText( Integer.toString( val ) );
bits.setText( getBits( val ) );
}
} );
c.add( left );
JButton rightSign = new JButton( ">>" );
rightSign.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
int val = Integer.parseInt( value.getText() );
val >>= 1;
value.setText( Integer.toString( val ) );
bits.setText( getBits( val ) );
}
} );
c.add( rightSign );
JButton rightZero = new JButton( ">>>" );
rightZero.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
int val = Integer.parseInt( value.getText() );
val >>>= 1;
value.setText( Integer.toString( val ) );
bits.setText( getBits( val ) );
}
} );
c.add( rightZero );
setSize( 400, 120 );
show();
}
private String getBits( int value )
{
int displayMask = 1 << 31;
StringBuffer buf = new StringBuffer( 35 );
for ( int c = 1; c <= 32; c++ )
{
buf.append( ( value & displayMask ) == 0 ? '0' : '1' );
value <<= 1;
if ( c % 8 == 0 )
buf.append( ' ' );
}
return buf.toString();
}
public static void main( String args[] )
{
BitShift app = new BitShift();
app.addWindowListener( new WindowAdapter()
{
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
} );
}
}