Friday, June 16, 2023

showing bits of int as it is saved as in memory in C

#include <stdio.h>
#include <stdlib.h>

void showBits(int s)
{
    int status, i, j, k, result, sz, bitStatus;
    int ibits[64]; // size of int in 64 bit OS is 64 bits = 8 bytes.
    char *pchi, jbit, chi;

    result = s;
    sz = sizeof(result);
    pchi = (char*)(&result);

    for(i = 0; i < sz; i++)
    {
        jbit = 0x01;
        chi = *pchi;

        for(j = 0; j < 8; j++)
        {
            bitStatus = (chi & jbit);
            chi = chi >> 1;
            ibits[(i * 8) + j] = bitStatus;
        }
        pchi++;
    }

    for(k = 63; k >= 0; k--)
    {
        printf("%d", ibits[k]);
    }
}

int main(int argc, char ** argv)
{
    int i, status, result, num;

    if( argc != 2)
    {
        printf("--Help \nshowBits int_value\n");
        return 0;
    }
    num = atoi(argv[1]);

    printf("\n");
    showBits(num);

    printf("\n");

//    printf("\n");
//    showBits(0);
//
//    printf("\n");
//    showBits(-1);
//
//    printf("\n");

    return 0;
}

/*

output :-
---------
[rahul@C-Client Debug]$ ./showBits 1

00000000000000000000000000000001
[rahul@C-Client Debug]$ ./showBits 0

00000000000000000000000000000000
[rahul@C-Client Debug]$ ./showBits -1

11111111111111111111111111111111
[rahul@C-Client Debug]$ ./showBits -2

11111111111111111111111111111110
[rahul@C-Client Debug]$

tip : negative numbers are stored in memory in two's complements.
so "-1" = all 1s : 11111111111111111111111111111111

*/

No comments:

Post a Comment