Java/Language Basics/Shifting
Содержание
Demonstrates short-circuiting behavior with logical operators
//: 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");
}
} ///:~
Right shift
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));
}
}
Shift to the left three
public class Main {
public static void main(String[] argv) throws Exception {
byte c = - 10;
System.out.println(c << 3); //
}
}
Show some effects of shifting on ints and longs
/*
* 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));
//-
}
}
Sign shift to the right
public class Main {
public static void main(String[] argv) throws Exception {
byte c = -10;
System.out.println(c >> 1);
}
}
Test of unsigned right shift.
//: 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);
}
} ///:~
unSign shift to the right
public class Main {
public static void main(String[] argv) throws Exception {
byte c = -10;
System.out.println(c >>> 1);
}
}