Why does printing char sometimes print 4 bytes number in C -


why printing hex representation of char screen using printf prints 4 byte number?

this code have written

#include <stdio.h> #include <stdint.h> #include<stdio.h>  int main(void) {     char teststream[8] = {'a', 'b', 'c', 'd', 0x3f, 0x9d, 0xf3, 0xb6};     int i;     for(i=0;i<8;i++){       printf("%c = 0x%x, ", teststream[i], teststream[i]);     }      return 0; } 

and following output:

a = 0x61, b = 0x62, c = 0x63, d = 0x64, ? = 0x3f, � = 0xffffff9d, � = 0xfffffff3, � = 0xffffffb6 

char appears signed on system. standard "two's complement" representation of integers, having significant bit set means negative number.

in order pass char vararg function printf has expanded int. preserve value sign bit copied new bits (0x9d0xffffff9d). %x conversion expects , prints unsigned int , see set bits in negative number rather minus sign.

if don't want this, have either use unsigned char or cast unsigned char when passing printf. unsigned char has no bits compared signed char , therefore same bit pattern. when unsigned value gets extended, new bits zeros , expected in first place.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -