Java/Language Basics/Shifting

Материал из Java эксперт
Перейти к: навигация, поиск

Demonstrates short-circuiting behavior with logical operators

   <source lang="java">

//: c03:ShortCircuit.java // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. public class ShortCircuit {

 static boolean test1(int val) {
   System.out.println("test1(" + val + ")");
   System.out.println("result: " + (val < 1));
   return val < 1;
 }
 static boolean test2(int val) {
   System.out.println("test2(" + val + ")");
   System.out.println("result: " + (val < 2));
   return val < 2;
 }
 static boolean test3(int val) {
   System.out.println("test3(" + val + ")");
   System.out.println("result: " + (val < 3));
   return val < 3;
 }
 public static void main(String[] args) {
   if(test1(0) && test2(2) && test3(2))
     System.out.println("expression is true");
   else
     System.out.println("expression is false");
 }

} ///:~


 </source>
   
  
 
  



Right shift

   <source lang="java">

public class Main {

 public static void main(String[] args) {
   int m = 15 % 4;
   System.out.println("m = " + m);
   m = 29;
   System.out.println("m >> 2 = " + (m >> 2));
 }

}

 </source>
   
  
 
  



Shift to the left three

   <source lang="java">

public class Main {

 public static void main(String[] argv) throws Exception {
   byte c = - 10;
   System.out.println(c << 3); //
 }

}

 </source>
   
  
 
  



Show some effects of shifting on ints and longs

   <source lang="java">

/*

* Copyright (c) Ian F. Darwin, http://www.darwinsys.ru/, 1996-2002.
* All rights reserved. Software written by Ian F. Darwin and others.
* $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS""
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* 
* Java, the Duke mascot, and all variants of Sun"s Java "steaming coffee
* cup" logo are trademarks of Sun Microsystems. Sun"s, and James Gosling"s,
* pioneering role in inventing and promulgating (and standardizing) the Java 
* language and environment is gratefully acknowledged.
* 
* The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
* inventing predecessor languages C and C++ is also gratefully acknowledged.
*/

/**

//+
* Show some effects of shifting on ints and longs
//-
* @author Ian F. Darwin, http://www.darwinsys.ru/
* @version $Id: Shifting.java,v 1.3 2004/02/09 03:33:54 ian Exp $
*/

public class Shifting {

 public static void main(String[] argv) {
   //+
   System.out.println(" 2<<4 = " + (2<<4));
   System.out.println(" 2<<8 = " + (2<<8));
   System.out.println("2<<16 = " + (2<<16));
   System.out.println("2<<24 = " + (2<<24));
   System.out.println("2<<31 = " + (2<<31));
   System.out.println("2<<32 = " + (2<<32));
   // Now try those last two as longs
   System.out.println("2<<31 = " + ((long)2<<31));
   System.out.println("2<<32 = " + ((long)2<<32));
   //-
 }

}


 </source>
   
  
 
  



Sign shift to the right

   <source lang="java">

public class Main {

 public static void main(String[] argv) throws Exception {
   byte c = -10;
   System.out.println(c >> 1);
 }

}

 </source>
   
  
 
  



Test of unsigned right shift.

   <source lang="java">

//: c03:URShift.java // From "Thinking in Java, 3rd ed." (c) Bruce Eckel 2002 // www.BruceEckel.ru. See copyright notice in CopyRight.txt. public class URShift {

 public static void main(String[] args) {
   int i = -1;
   System.out.println(i >>>= 10);
   long l = -1;
   System.out.println(l >>>= 10);
   short s = -1;
   System.out.println(s >>>= 10);
   byte b = -1;
   System.out.println(b >>>= 10);
   b = -1;
   System.out.println(b>>>10);
 }

} ///:~


 </source>
   
  
 
  



unSign shift to the right

   <source lang="java">

public class Main {

 public static void main(String[] argv) throws Exception {
   byte c = -10;
   System.out.println(c >>> 1);
 }

}

 </source>