c - Left shifting operation on int -
on indiabix.com came across following question.as per experience level(beginner in c) output of above should 0 (10000000 << 1 00000000) came out 256,after going deeper found printing using %d supports 4 bytes output 256 instead of 0.
#include<stdio.h> int main() { unsigned char = 128; printf("%d \n", << 1); return 0; } now consider following example
#include<stdio.h> int main() { unsigned int = 2147483648;(bit 31 = 1 , b0 b30 0) printf("%d \n", i<<1); return 0; } when left shift above 0 output, %d supports value of int output should 0 when changed %d %ld output still 0. %ld supports values upto long int output should not 0.why getting 0 output.
in first case, i promoted int, can store @ least 32767, shift calculated. result, result became 256.
in second case, if unsigned int 32-bit long, calculated in unsigned int , result wraps. result, result became 0.
you have cast larger type want.
#include<stdio.h> #include<inttypes.h> int main() { unsigned int = 2147483648;//(bit 31 = 1 , b0 b30 0) printf("%"priu64" \n", (uint64_t)i<<1); return 0; }
Comments
Post a Comment