|
float f( float x) { float r; r = x*x; return(r); } int main(int argc, char *argv[] ) { int a, b; a = 2; b = f(a); } |
In the function call:
b = f(a) |
#include <stdio.h> float f( float x) { printf(" f: x = %f , in binary: ", x); printBits(&x); printf("\n"); float r; r = x*x; printf(" f: r = %f , in binary: ", r); printBits(&r); printf("\n"); return(r); } int main(int argc, char *argv[] ) { int a, b; a = 2; printf("main: a = %d , in binary: ", a); printBits(&a); printf("\n"); b = f(a); printf("main: b = %d , in binary: ", b); printBits(&b); printf("\n\n"); } |
Output:
main: a = 2 , in binary: 00000000000000000000000000000010 (int repr of 2) f: x = 2.000000 , in binary: 01000000000000000000000000000000 (float repr of 2) f: r = 4.000000 , in binary: 01000000100000000000000000000000 (float repr of 4) main: b = 4 , in binary: 00000000000000000000000000000100 (int repr of 4) |
How to run the program:
|
|
public class func_call_conv1 { static int f( float x) { System.out.printf(" f: x = %f , in binary: ", x); printBitFloat(x); System.out.println(); int r; r = (int) (x*x); System.out.printf(" f: r = %d , in binary: ", r); printBitInt(r); System.out.println("\n"); return(r); } public static void main(String[] args) { int a; float b; a = 2; System.out.printf("main: a = %d , in binary: ", a); printBitInt(a); System.out.println("\n"); b = f(a); // Compiler performs these conversions: // int a ---> float x (safe !) // int return value ---> float b (safe !) System.out.printf("main: b = %f , in binary: ", b); printBitFloat(b); System.out.println("\n"); } .... // Conversion methods omitted } |
Output:
main: a = 2 , in binary: 00000000000000000000000000000010 f: x = 2.000000 , in binary: 01000000000000000000000000000000 f: r = 4 , in binary: 00000000000000000000000000000100 main: b = 4.000000 , in binary: 01000000100000000000000000000000 |
How to run the program:
|
public class func_call_conv2 { static float f( int x) { System.out.printf(" f: x = %d , in binary: ", x); printBitInt(x); System.out.println(); float r; r = x*x; System.out.printf(" f: r = %f , in binary: ", r); printBitFloat(r); System.out.println("\n"); return(r); } public static void main(String[] args) { float a; int b; a = 2.0f; System.out.printf("main: a = %f , in binary: ", a); printBitFloat(a); System.out.println("\n"); b = (int) f((int) a); // *** Need 2 casts !!! // You need to request explicit casting for // float a --> int x (unsafe !) // float return value --> int b (unsafe !) System.out.printf("main: b = %d , in binary: ", b); printBitInt(b); System.out.println("\n"); } // Conversion methods omitted.... } |
Output:
main: a = 2.000000 , in binary: 01000000000000000000000000000000 f: x = 2 , in binary: 00000000000000000000000000000010 f: r = 4.000000 , in binary: 01000000100000000000000000000000 main: b = 4 , in binary: 00000000000000000000000000000100 |
How to run the program:
|