>1); return 0; } ffff 0fff 0000 fff0 Negative numbers are treated with 2's comple"> >1); return 0; } ffff 0fff 0000 fff0 Negative numbers are treated with 2's comple">
logo

CuriousTab

CuriousTab

Discussion


Home C Programming Bitwise Operators See What Others Are Saying!
  • Question
  • Assuming, integer is 2 byte, What will be the output of the program?
    #include;
    
    int main()
    {
        printf("%x\n", -1>>1);
        return 0;
    }
    


  • Options
  • A. ffff
  • B. 0fff
  • C. 0000
  • D. fff0

  • Correct Answer
  • ffff 

    Explanation
    Negative numbers are treated with 2's complement method.

    1's complement: Inverting the bits ( all 1s to 0s and all 0s to 1s)
    2's complement: Adding 1 to the result of 1's complement.
    Binary of 1(2byte)     :  0000 0000 0000 0001
    Representing -1:
    1s complement of 1(2byte)    : 1111 1111 1111 1110
    Adding 1 to 1's comp. result : 1111 1111 1111 1111
    Right shift 1bit(-1>>1): 1111 1111 1111 1111 (carry out 1)
    Hexadecimal            : f   f    f    f
    (Filled with 1s in the left side in the above step)
    Note:

    1. Fill with 1s in the left side for right shift for negative numbers.
    2. Fill with 0s in the right side for left shift for negative numbers.
    3. Fill with 0s in the left side for right shift for positive numbers.
    4. Fill with 0s in the right side for left shift for positive numbers.


    More questions

    • 1. Which of the following statements correct about k used in the below statement?
      char ****k;

    • Options
    • A. k is a pointer to a pointer to a pointer to a char
    • B. k is a pointer to a pointer to a pointer to a pointer to a char
    • C. k is a pointer to a char pointer
    • D. k is a pointer to a pointer to a char
    • Discuss
    • 2. What will be the output of the program?
      #include<stdio.h>
      
      void fun(void *p);
      int i;
      
      int main()
      {
          void *vptr;
          vptr = &i;
          fun(vptr);
          return 0;
      }
      void fun(void *p)
      {
          int **q;
          q = (int**)&p;
          printf("%d\n", **q);
      }
      

    • Options
    • A. Error: cannot convert from void** to int**
    • B. Garbage value
    • C. 0
    • D. No output
    • Discuss
    • 3. What will be the output of the program?
      #include<stdio.h>
      #include<string.h>
      
      int main()
      {
          static char s[] = "Hello!";
          printf("%d\n", *(s+strlen(s)));
          return 0;
      }
      

    • Options
    • A. 8
    • B. 0
    • C. 16
    • D. Error
    • Discuss
    • 4. What will be the output of the program?
      #include<stdio.h>
      
      int main()
      {
          int i=4, j=8;
          printf("%d, %d, %d\n", i|j&j|i, i|j&&j|i, i^j);
          return 0;
      }
      

    • Options
    • A. 4, 8, 0
    • B. 1, 2, 1
    • C. 12, 1, 12
    • D. 0, 0, 0
    • Discuss
    • 5. What will you do to treat the constant 3.14 as a float?

    • Options
    • A. use float(3.14f)
    • B. use 3.14f
    • C. use f(3.14)
    • D. use (f)(3.14)
    • Discuss
    • 6. What will be the output of the program if value 25 given to scanf()?
      #include<stdio.h>
      
      int main()
      {
          int i;
          printf("%d\n", scanf("%d", &i));
          return 0;
      }
      

    • Options
    • A. 25
    • B. 2
    • C. 1
    • D. 5
    • Discuss
    • 7. In the statement expression1 >> expression2. if expression1 is a signed integer with its leftmost bit set to 1 then on right shifting it the result of the statement will vary from computer to computer

    • Options
    • A. True
    • B. False
    • Discuss
    • 8. What do the following declaration signify?
      int *ptr[30];

    • Options
    • A. ptr is a pointer to an array of 30 integer pointers.
    • B. ptr is a array of 30 pointers to integers.
    • C. ptr is a array of 30 integer pointers.
    • D. ptr is a array 30 pointers.
    • Discuss
    • 9. Range of float id -2.25e+308 to 2.25e+308

    • Options
    • A. True
    • B. False
    • Discuss
    • 10. What will be the output of the program (in Turbo C under DOS)?
      #include<stdio.h>
      
      int main()
      {
          char huge *near *far *ptr1;
          char near *far *huge *ptr2;
          char far *huge *near *ptr3;
          printf("%d, %d, %d\n", sizeof(ptr1), sizeof(ptr2), sizeof(ptr3));
          return 0;
      }
      

    • Options
    • A. 4, 4, 8
    • B. 2, 4, 4
    • C. 4, 4, 2
    • D. 2, 4, 8
    • Discuss


    Comments

    Avatar
    Joisurb
    It also predicts recurrence more accurately than Adjuvant


Enter a new Comment