|
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:
|