3个嵌入式面试题目,位运算使用 3.interview question for firmware engineer interview

3 interview question for firmware engineer interview

  1. 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);   
}
}

在这里插入图片描述

  1. 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
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值