编写一个函数getbits,从一个十六位的单元中取出某几位(即该几位保留原值,其余位为0)。函数调用形式为:getbits(value1,n1,n2)

原理如下:
对一个8进制数101675
二进制为 1 0 0 0 0 0 1 1 1 0 1 1 1 1 0 1
取出5~8位(从右往左取)
此时先将101675<<(右移)5位 左边补0
此时变为 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1
想要取出5~8位 此时只需要& 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
想要得到这样一个0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1二进制数
只需要将~0(全为1)向左移动(n2-n1+1)即需要保留的位数 如5-8 8-5+1 保留4位
此时为 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0
再对它按位取反 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
&上 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1

#include <stdio.h> 
int main()
{
	unsigned int getbits(unsigned value,int n1,int n2);
	unsigned int value;
	int n1,n2;
	printf("input an octal number:");
	scanf("%o",&value);//输入8进制数 
	printf("input n1,n2:");
	scanf("%d,%d",&n1,&n2);
	printf("result:%o\n",getbits(value,n1,n2));//8进制输出 
 
    return 0;
}
 
unsigned int getbits(unsigned value,int n1,int n2)
{
	unsigned int z;
	z=(~(~0<<(n2-n1+1)))&(value>>(n1));
	return z;
}

结果为8进制的15
即 二进制 1101
在这里插入图片描述

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现MFC 3*5均值滤波的响应函数的示例代码: ```cpp void CYourDialog::OnMeanFilter() { // 获取图像数据 CImage image; image.Load(_T("your_image.bmp")); BYTE* pImg = (BYTE*)image.GetBits(); int width = image.GetWidth(); int height = image.GetHeight(); // 定义滤波模板 int filter[3][5] = { {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}, {1, 1, 1, 1, 1}}; // 对图像进行滤波 int i, j, k, l, sum; BYTE* pTemp = new BYTE[width*height]; for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { sum = 0; for (k = -1; k <= 1; k++) { for (l = -2; l <= 2; l++) { if (i + k >= 0 && i + k < height && j + l >= 0 && j + l < width) { sum += pImg[(i + k)*width + (j + l)] * filter[k + 1][l + 2]; } } } pTemp[i*width + j] = sum / 15; } } // 显示滤波后的图像 CImage meanImage; meanImage.Create(width, height, 24); BYTE* pMeanImg = (BYTE*)meanImage.GetBits(); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { pMeanImg[i*meanImage.GetPitch() + j * 3] = pTemp[i*width + j]; pMeanImg[i*meanImage.GetPitch() + j * 3 + 1] = pTemp[i*width + j]; pMeanImg[i*meanImage.GetPitch() + j * 3 + 2] = pTemp[i*width + j]; } } CWnd* pWnd = GetDlgItem(IDC_STATIC_IMAGE); CRect rect; pWnd->GetClientRect(rect); CDC* pDc = pWnd->GetDC(); meanImage.Draw(pDc->m_hDC, rect); ReleaseDC(pDc); delete[] pTemp; } ``` 说明: - 该函数在 MFC 对话框程序响应按钮的点击事件。 - 该函数首先获取图像数据,然后定义 3*5 的均值滤波模板。 - 然后对图像进行滤波,将处理后的结果保存在 pTemp 数组。 - 最后将 pTemp 数组的数据转换为 RGB 格式,用 CImage 类显示出来。 - 注意:在实际使用时,需要将 IDC_STATIC_IMAGE 改成实际的图像显示控件的 ID。 希望这个示例代码能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值