Expressions in C Programming MCQ Questions and Answers
1. Consider: int a = 5; int b = ++a + a++;. What is the behavior according to the C standard?
A) b == 12 and defined
B) b == 11 and defined
C) Undefined behavior (modifying a more than once without sequencing)
D) b == 10 and defined
Answer: C
2. Which expression yields the type unsigned int if x is int and y is unsigned int?
A) x + y
B) (int)x + (int)y
C) x – y (when x negative)
D) x * (int)y
Answer: A
3. What does sizeof (1 + 2.0f) evaluate to (on an implementation where float is 4 bytes and double is 8 bytes)?
A) 4
B) 8
C) Undefined
D) Size of int
Answer: A
4. For int x = -1; unsigned int u = 1;, what is the value of x < u?
A) true
B) false
C) Undefined
D) Depends on implementation endianness
Answer: B
5. Which operator has higher precedence: ?: (conditional) or || (logical OR)?
A) ?: has higher precedence than ||
B) || has higher precedence than ?:
C) They have equal precedence and are left-associative
D) They are not comparable
Answer: B
6. Expression: int a = 1; a = (a = 2) + (a = 3); — what is the result?
A) a == 5
B) a == 3
C) Undefined behavior
D) a == 2
Answer: C
7. What does ++*p do if p is int *p pointing to a valid int?
A) Increment pointer p then dereference
B) Dereference pointer, increment the pointed value, return new value
C) Undefined because of precedence
D) Increment the pointer value (address)
Answer: B
8. Given short s = 32767; int r = s + 1;, what is guaranteed by the standard?
A) r == -32768
B) r == 32768
C) Undefined
D) r will overflow
Answer: B
9. Which of the following is undefined behavior in C?
A) Reading an object after it has been free()d
B) Accessing an array element within bounds
C) Using & to take address of variable
D) Applying sizeof to a type
Answer: A
10. For unsigned int u = 0; u = u – 1; the resulting value is:
A) -1 as signed int
B) 0
C) Maximum representable unsigned int
D) Undefined
Answer: C
11. The expression a << b where a is a signed negative integer is:
A) Undefined if left-shifting negative values
B) Always arithmetic shift right
C) Well-defined
D) Equivalent to a * 2^b
Answer: A
12. Which statement about the comma operator (,) in C is true?
A) Evaluates left operand, discards result, then evaluates right; result is right operand
B) Acts like logical AND
C) Creates sequence point only in C99
D) Concatenates strings
Answer: A
13. What is the result type of the expression 1U / 2?
A) double
B) float
C) unsigned int
D) int
Answer: C
14. For int i = 0; i = i++ + ++i; this expression:
A) Defined and gives 2
B) Undefined behavior
C) Gives 1
D) Gives 3
Answer: B
15. Which conversion is performed in double d = 1 / 2;?
A) Integer division then conversion (0.0)
B) Floating division (0.5)
C) Undefined
D) Implicit double before division
Answer: A
16. int a = 5; int b = (a *= 3) + (a += 2); — result?
A) b == 22
B) Undefined (multiple modifications)
C) b == 20
D) b == 17
Answer: B
17. What does ~0 evaluate to for 32-bit int two’s complement?
A) 0
B) -1
C) Random value
D) Undefined
Answer: B
18. Which expression forces integer promotion of char c to int?
A) c + 0
B) (signed char)c
C) c << 0
D) All of the above
Answer: A
19. For float f = 1e38f * 1e5f; the result is typically:
A) Finite large float
B) +Inf
C) Undefined
D) NaN
Answer: B
20. Expression ((void)0, expression) does what?
A) Syntax error
B) Casts expression to void
C) Evaluates (void)0 then expression
D) Converts to null pointer
Answer: C
21. Which is true about && and ||?
A) Both always evaluated
B) Left operand first, short-circuits possible
C) Right operand first
D) Both sequence points always
Answer: B
22. In int a=2, b=3; int c = a+++b; what happens?
A) Syntax error
B) c = a++ + b
C) c = a + ++b
D) Undefined
Answer: B
23. int x = 1; x = (x << 1) + (x >> 1); — result?
A) x == 3
B) Undefined
C) Implementation-defined due to right shift
D) x == 2
Answer: C
24. Which of the following causes undefined behavior?
A) Strict aliasing violation
B) Casting void* back correctly
C) Using memcpy between same type
D) Reading initialized variable
Answer: A
25. ((int)0xFFFF) + 1 on 32-bit int yields:
A) 65536
B) -1 + 1 = 0
C) 0x00010000
D) 65536
Answer: D
26. p[i] is equivalent to:
A) *(p+i)
B) *(i+p)
C) i[p]
D) All of the above
Answer: D
27. int a=1; a=(a<<31)>>31; assuming arithmetic right shift — final a?
A) 0
B) 1
C) -1
D) Implementation-defined
Answer: D
28. Valid ternary expression?
A) condition ? x : y = z;
B) a ? b : c ? d : e
C) a ? : b
D) int t=(f(),g())?x:y;
Answer: B
29. Function argument evaluation order in C:
A) Left-to-right
B) Right-to-left
C) Unspecified
D) Sequenced after call
Answer: C
30. Value category of a + b (arithmetic)?
A) lvalue
B) xvalue
C) rvalue (non-lvalue)
D) glvalue
Answer: C
31. int x=5; int y=(x*=2)+(x*=3); result:
A) 35
B) Undefined
C) 10
D) 15
Answer: B
32. Which causes integer promotion?
A) char c; c+1
B) short s; s*3
C) enum e; e+0
D) All of the above
Answer: D
33. (int *)((char *)p + 1) where p is int *:
A) Properly aligned
B) Possibly misaligned → UB if dereferenced
C) Converts to void*
D) Always valid
Answer: B
34. About volatile:
A) Prevents optimization of accesses
B) Guarantees atomicity
C) Guarantees sync
D) Makes const
Answer: A
35. Type of 1 << 31 (32-bit int)?
A) unsigned int
B) int
C) long
D) unsigned long
Answer: B
36. For float a=NAN; which comparison true?
A) a==a
B) a!=a
C) a<a
D) a>=a
Answer: B
37. double d=5/2+0.5;
A) 2 + 0.5 = 2.5
B) 5→double then /
C) Undefined
D) 0.5→int
Answer: A
38. Well-defined behavior?
A) Increment pointer to one-past-end
B) Dereference one-past-end
C) Decrement null pointer
D) Add two pointers
Answer: A
39. 1 << (sizeof(int)*CHAR_BIT-1) produces:
A) Sign bit mask
B) Undefined
C) Zero
D) Max int
Answer: A
40. About const in expressions:
A) Disallows use
B) Forbids modification only
C) Always compile-time constant
D) Ensures thread safety
Answer: B
41. Which is evaluated left-to-right?
A) && left before right
B) Function args
C) +
D) |
Answer: A
42. int a=3; a=a++*++a;
A) 12
B) Undefined
C) 9
D) 4
Answer: B
43. Type of sizeof?
A) int
B) size_t
C) unsigned int
D) long
Answer: B
44. Negative integer division rule:
A) Rounds toward zero
B) Impl-defined (C99)
C) Always floor
D) UB
Answer: A
45. ((unsigned)-1)<0
A) true
B) false
C) UB
D) Impl-defined
Answer: B
46. int a=0x7FFFFFFF; a=a+1;
A) Signed overflow → UB
B) Wrap guaranteed
C) Produces defined
D) Trap
Answer: A
47. (void)printf(“%d”,(++i,i+5));
A) Prints i+5 after increment
B) Syntax error
C) Prints incremented i
D) UB
Answer: A
48. Is ++i + i defined?
A) Yes
B) No — UB
C) 2*i+1
D) 2*i
Answer: B
49. Demonstrates usual arithmetic conversions:
A) double + int
B) char + char
C) unsigned + signed
D) All
Answer: D
50. int i=1; int j=(i=4,i+1); — j?
A) 1
B) 5
C) 4
D) UB
Answer: B
51. Bit-field in expressions:
A) Promoted to int
B) Remains bit-field type
C) Cannot be used
D) Always unsigned
Answer: A
52. Which is atomic?
A) volatile int read
B) ++int
C) Access sig_atomic_t
D) All int read
Answer: C
53. (unsigned char)-1
A) 0xFF
B) UB
C) -1
D) Pointer value
Answer: A
54. int a=2,b=3; int c=a&b<<1; parsed as:
A) a & (b<<1)
B) (a&b)<<1
C) Ambiguous
D) a&b then shift
Answer: A
55. Which not compile-time evaluable?
A) sizeof(int)
B) (1<<31)
C) Global non-const access
D) 3*5
Answer: C
56. Constant-expression for static init:
A) Literals, sizeof, enum, casts w/o side effects
B) Anything optimizer folds
C) Any const vars
D) Volatile vars
Answer: A
57. ((unsigned)-1)>>1 (32-bit):
A) 0x7FFFFFFF
B) 0xFFFFFFFF
C) Undefined
D) -1
Answer: A
58. Alters evaluation order?
A) Sequence points/operators
B) Optimization flags
C) Parentheses
D) Endianness
Answer: A
59. (int)(unsigned char)c with signed char negative →
A) Negative int
B) Positive int (converted value)
C) UB
D) Impl-defined
Answer: B
60. Meaning of p + n pointer arithmetic:
A) (char*)p + n
B) Adds n*sizeof(*p) bytes
C) Adds raw bytes
D) Undefined for negative
Answer: B
61. Legal and defined?
A) (void)(x=7);
B) (x=7)&&1;
C) if(x=7)
D) All
Answer: D
62. Integer division /:
A) Truncate toward zero
B) Floating division
C) Impl-defined
D) UB
Answer: A
63. GCC a ?: b means:
A) a ? a : b
B) Syntax error
C) a ? b : a
D) Always b
Answer: A
64. int x=2; int y=(x=8)+(x=x+1);
A) Well-defined
B) Undefined
C) 16
D) 9
Answer: B
65. ptr – arr yields:
A) Bytes diff
B) Element diff (ptrdiff_t)
C) Undefined
D) Pointer
Answer: B
66. a & b == a when?
A) b all ones
B) b zero
C) b zeros only
D) a negative
Answer: A
67. Implementation-defined, not UB:
A) Shift unsigned sign bit
B) Right-shift negative signed
C) Pointer→integer cast reversible
D) Access after free
Answer: C
68. !!x effect:
A) Normalize to 0/1
B) UB if not bool
C) Negates twice
D) Inverts bits twice
Answer: A
69. a = b + c returns:
A) New a value
B) Old a
C) void
D) Undefined
Answer: A
70. (void)0 considered:
A) Full expression, no side effect
B) Illegal
C) Sequence point
D) Yields 0
Answer: A
71. Function pointer args order:
A) Unspecified; may interleave → UB if side effects collide
B) Left→Right
C) Right→Left
D) Link-time
Answer: A
72. double x=0.1; x==0.1?
A) Always true
B) May be false (binary approx)
C) UB
D) True only if decimal FP
Answer: B
73. Operand of sizeof expression:
A) Not evaluated (except VLA)
B) Evaluated L→R
C) Only if volatile
D) Always runtime
Answer: A
74. int *p=malloc(4); p[1]=5; UB?
A) Possibly UB if int>4
B) Always defined
C) Only UB if int>4
D) Both A & C
Answer: D
75. (x & -x) computes:
A) Highest bit
B) Lowest set bit
C) Two’s complement
D) Zero
Answer: B
76. Pointer comparison p<q defined if:
A) Same array (or one past end)
B) Always
C) Always false for diff objects
D) Compares addresses
Answer: A
77. Not a sequencing point:
A) ; end full expr
B) + operands
C) Comma operator
D) ?: conditional
Answer: B
78. Integer promotion difference when char signed?
A) c*2
B) (unsigned char)c
C) c<<1
D) All
Answer: D
79. (*p)++ if p points to const int?
A) UB (modifies const)
B) Valid
C) Compiles
D) Reads only
Answer: A
80. Effect of i += i++:
A) Undefined (modifies twice)
B) 2*i+1
C) i=i+i+1
D) i=i+1
Answer: A
81. Difference between sizeof and _Alignof:
A) One gives size, other alignment
B) Same
C) Both runtime
D) None
Answer: A
82. Expression p == &*p:
A) Always true for valid p
B) False
C) UB
D) Depends on const
Answer: A
83. Pointer subtraction type:
A) ptrdiff_t
B) size_t
C) int
D) unsigned long
Answer: A
84. (int)0xFFFF + (int)0xFFFF (16-bit int) →
A) -2
B) UB
C) 65534
D) Impl-defined
Answer: A
85. Type of ‘\0’:
A) char
B) int
C) unsigned char
D) short
Answer: B
86. Evaluate 1 && 2 || 0 && 3:
A) 1
B) 2
C) 0
D) 3
Answer: A
87. x = y = z = 0; associates:
A) Right-to-left
B) Left-to-right
C) Unspecified
D) None
Answer: A
88. Unary plus +x effect:
A) Integer promotion
B) Negation
C) UB
D) Rounds
Answer: A
89. (a=5, a+1) evaluates to:
A) 5
B) 6
C) a+1
D) Undefined
Answer: B
90. (void)sizeof(x++) causes:
A) x incremented
B) Not evaluated
C) UB
D) Run-time
Answer: B
91. p = (int *)&x; *p = 0; violates:
A) Strict aliasing if x not int
B) None
C) Alignment
D) None
Answer: A
92. int i=0; i = i++ + ++i + i;
A) Undefined
B) 3
C) 4
D) Impl-defined
Answer: A
93. x & (x-1) clears:
A) Lowest set bit
B) Highest
C) All bits
D) Toggles all
Answer: A
94. char c=-1; printf(“%d”,c);
A) -1
B) 255
C) UB
D) 0
Answer: A
95. Casting pointer to smaller integer:
A) Impl-defined
B) UB
C) Safe
D) Zero
Answer: A
96. Which operator never overloaded in C?
A) sizeof
B) +
C) ->
D) []
Answer: A
97. _Generic(1, int:2, default:3)
A) 2
B) 3
C) UB
D) Compile error
Answer: A
98. printf(“%d”, (int)3.8 + 0.2); prints:
A) 4
B) 3
C) 3.8
D) Error
Answer: B
99. if (a = 0) means:
A) Assign 0 to a, test false
B) Compare
C) UB
D) Always true
Answer: A
100. (unsigned int)-1 / 2 gives:
A) Large positive /2
B) -1/2
C) UB
D) 0
Answer: A
