今天的一道面试题分享一下:unsigned int intvert(unsigned int x,int p, int n)实现对x的进行转换,p为起始转换位,n为需要转换的长度,假设起始点在右边,如x=0b0001 0001 ,p=4,n=3装换后x=0b0110 0001
#include <stdio.h>
unsigned int intvert(unsigned int x,int p, int n)
{
unsigned int y = 0 ; //定义的变量一定要初始化!
while(n--)
{
y |= (1<<(n+p));
}
x=((~x)&y)|(x&(~y));
return x;
}
int main()
{
unsigned int x = 0b00010001;
unsigned int y = 0;
y = intvert(x,4,3);
printf("%d \n",y);
int a = 0b01100001;
printf("%d \n",a);
}
我测试时,因为函数中的y变量没有初始化为0,结果不对。检查了一遍才发现。所以,无论定义什么变量,记得一定要初始化,一定要初始化,一定要初始化(重要的事情说三遍)。