Host introspection

From Rosetta Code
Revision as of 02:23, 11 October 2008 by rosettacode>Spoon! (added c)
Task
Host introspection
You are encouraged to solve this task according to the task description, using any language you may know.

Print the word size and endianness of the host machine.

C

<c>#include <stdio.h>

int main() {

   int word = 1;
   printf("word size = %d\n", 8 * sizeof(void *)); // a pointer takes up a word
   if (*(char *)&word) // if the least significant bit is located in the lowest-address byte
       printf("little endian\n");
   else
       printf("big endian\n");
   return 0;

}</c>

Forth

: endian
  cr 1 cells . ." address units per cell"
  s" ADDRESS-UNIT-BITS" environment? if cr . ." bits per address unit" then
  cr 1 here ! here c@ if ." little" else ." big" then ."  endian" ;

This relies on c@ being a byte fetch (4 chars = 1 cells). Although it is on most architectures, ANS Forth only guarantees that 1 chars <= 1 cells. Some Forths like OpenFirmware have explicitly sized fetches, like b@.

J

   ":&> (|: 32 64 ;"0 big`little) {"_1~ 2 2 #: 16b_e0 + a. i. 0 { 3!:1 ''  
32
little

OCaml

Print word size: <ocaml>Printf.printf "%d\n" Sys.word_size</ocaml> Dunno about endianness