3 interview question for firmware engineer interview
- Write a method to determine if the integer i is an even or an odd number?
#include"stdio.h"
void even_or_odd(int data)
{
if ((data % 2) == 0)
{
printf("even\n");
}
else
{
printf("odd\n");
}
}
void main(void)
{
int data = 7;
printf("\n\nHello Lihua Long, \nthe data is %d, \nit is :", data);
even_or_odd(data);
}
}
- You are given an integer, K, and a bit position, n.Write a method to flip the nth position bit of integer K.?
#include "stdio.h"
typedef unsigned char uint8_t;
void printBinary(uint8_t data)
{
uint8_t bits = (sizeof(data) * 8);
uint8_t i;
for (i = 0; i < bits; i++)
{
// if(((data << i) & (1 << (bit_num - 1))) == (1 << (bit_num - 1)))
if((data << i) & (1 << (bits - 1)))
{
printf("%d",1);
}
else
{
printf("%d",0);
}
}
}
void main()
{
uint8_t data = 0b00001;
uint8_t n = 3;
uint8_t mask = 1 << n;
printf("\n\nHello Lihua Long");
printf("\n");
printf("the data(bin) is 0b:");
printBinary(data);
data ^= mask;
printf("\n");
printf("the data(bin) after modified is 0b:");
printBinary(data);
}
You are given two 32-bit numbers, N and M, and two bit positions, i and j.Write a method to insert M into N such that M starts at bit j and ends at bit i. You can assume that the bits j through i have enough space to fit all of M.
#include "stdio.h"
typedef unsigned int uint32_t;
typedef unsigned char uint8_t;
void print_binary(uint32_t data)
{
uint8_t bits = (sizeof(data) * 8);
uint8_t i;
for (i = 0; i < bits; i++)
{
// if(((data << i) & (1 << (bit_num - 1))) == (1 << (bit_num - 1)))
if((data << i) & (1 << (bits - 1)))
{
printf("%d",1);
}
else
{
printf("%d",0);
}
}
}
void main(void)
{
uint32_t i = 0b101100111;
uint32_t j = 0b11010;
uint8_t N = 2;
uint8_t M = 6;
uint32_t mask = ~(((1 << (M - N + 1)) - 1) << N);
printf("\n");
printf("\n\nHello Lihua Long, good job!!\n");
printf("the mask is :");
print_binary(mask);
printf("\n");
printf("the initial data is :");
print_binary(i);
printf("\n");
printf("the data as inserted is :");
print_binary(j);
printf("\n");
i &= mask;
printf("clr segment by mask is :");
print_binary(i);
printf("\n");
i |= j << N;
printf("the data after inserted is :");
print_binary(i);
}
//the result run by ./main
// Hello Lihua Long, good job!!
// the mask is :11111111111111111111111110000011
// the initial data is :00000000000000000000000101100111
// the data as inserted is :00000000000000000000000000011010
// clr segment by mask is :00000000000000000000000100000011
// the data after inserted is :00000000000000000000000101101011