```package lectures.types.math;
import util.annotations.WebDocuments;

@WebDocuments({"Lectures/TypesMath.pptx", "Lectures/TypesMath.pdf", "Videos/TypesMath.avi"})
public class ACastConversionDemo {
public static final double EXAMPLE_DOUBLE = 5.4;
public static final long EXAMPLE_LONG = Long.MAX_VALUE;
/**
* If T1 is a subset of T2, this method helps us understand if and how we
* can assign an expression of type T2 to a variable of type T1.
*/
public static void narrowingATypeDiscovery() {
//      System.out.println(EXAMPLE_DOUBLE + " --> int:" + aDoubleToInt);
//      int aLongToInt =  EXAMPLE_LONG;
//      System.out.println(EXAMPLE_LONG + " --> in:" + aLongToInt);
}
/*
* Uncomment the code in the method above by selecting it and pressing CTRL.
* Look at the errors. Hover over each of them and see the suggestions.
* Take the one that asks for cast. Run the program.
*
* The first print statement displays:
* (a) 0
* (b) NAN
* (c) 5
*
* Which of the the following statements are consistent with your observations:=
*
* If T1 is a subset of T2, an expression of type T2
* (a) can never be assigned to a variable of type T1.
* (b) can be assigned to a variable of type T1 using a cast, which does a lossy
*     conversion of T2 to T1.
* (c) can be assigned to a variable of type T1 using a cast, which converts the
*     value to 0.
*
*/

public static void main (String[] args) {
narrowingATypeDiscovery();
narrowingATypeExplanation();
}

/**
* This method shows that if T1 is a subset of T2, then an expression E of
* type T2 can be assigned to a variable v type of type by using a cast of
* the form (T1) E, which does a lossy conversion of T2 to T1 in which some
* but no all information in E is lost.
*/
public static void narrowingATypeExplanation() {
int aDoubleToInt = (int) EXAMPLE_DOUBLE; // truncating double
System.out.println(EXAMPLE_DOUBLE + " --> int:" + aDoubleToInt);
int aLongToInt = (int) EXAMPLE_LONG;// truncating long
System.out.println(EXAMPLE_LONG + " --> in:" + aLongToInt);
}
/*
* What do you expect as the output of the program based on the method comment
* above.
*
* Q. Run the method and observe the output.
* The first print statement displays:
* (a) 0
* (b) NAN
* (c) 5
*
*/
}
```