jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
bitovy-posun.c
Go to the documentation of this file.
1 
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <limits.h>//INT_MAX
12 
13 //vypise shift vyraz a jeho vysledek
14 //pouzijeme # makro operator stringize, viz treba <assert.h>!
15 #define SHIFT(expr) do {int i=(expr);unsigned u=(expr);printf("%20s => 0x%08x %11d\n", #expr, u, i);}while(0)
16 
17 int main(void){
18 
19 //note: c nema binarni vypis, "nejblizsi" je %x hexa, 0xf je adekvatni 0b1111
20  printf("%20s => 0x%%08x %%10d prvni je unsigned hexa vypis, druhy signed decimal\n", "shift vyraz");
21  SHIFT(1<<1);//nasobeni dvema 2^1
22  SHIFT(1<<2);//nasobeni ctyrmi 2^2
23  SHIFT(1<<3);//nasobeni osmi 2^3
24  SHIFT(255<<8);//nasobeni 256
25  SHIFT(0xff<<8);//dtto jako predchozi
26  SHIFT(INT_MAX);// INT_MAX je 0x7fff ffff
27  SHIFT(UINT_MAX);
28  SHIFT(0x0000ffffU<<8);
29  SHIFT(0x00ffffffU<<8);
30  SHIFT(0x7fffffffU<<8);//toto uz preteka!!!
31 //shift doprava muze byt zajimavy,
32 //u zapornych signed je implementacne zavisle, zda-li se znamenkovy bit kopiruje!!!
33  SHIFT(-1);//jen vypis reprezentace zaporneho cisla
34  SHIFT(UINT_MAX);//max unsigned je bitove totez co signed -1!!! dvojkovy doplnek!!!
35  SHIFT(-2);
36  SHIFT(-INT_MAX+1);
37  SHIFT(0x80000000);//0x80000000 je MAX znamenkovy INT
38  SHIFT(0x80000000 >>1);
39  SHIFT(0x80000000U>>1);
40 
41  return EXIT_SUCCESS;
42 }