位运算习题解答

1、统计一个无符号整数的二进制表示中1的个数,函数原型是int countbit(unsigned int x);

/*Count the number of 1-bits in a positive number.
**By LYLtim
*/
int CountBit(unsigned x)
{
	x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
	x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
	x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
	x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
	x = (x & 0x0000FFFF) + ((x >> 16) & 0x0000FFFF);
	return x;
}

 巧妙地运用分治思想,详见:http://www.cnblogs.com/LYLtim/archive/2011/11/05/2236816.html

 

2、用位操作实现无符号整数的乘法运算,函数原型是unsigned int multiply(unsigned int x, unsigned int y);。例如:(11011)2×(10010)2=((11011)2<<1)+((11011)2<<4)。

//By LYLtim
unsigned multiply (unsigned x, unsigned y)
{
	unsigned sum = 0, bit = 0;
	while (y != 0) {
		if (y & 1 == 1) sum += x << bit;
		y >>= 1;
		bit += 1;
	}
	return sum;
}

 

3、对一个32位无符号整数做循环右移,函数原型是unsigned int rotate_right(unsigned int x, int n);。所谓循环右移就是把低位移出去的部分再补到高位上去,例如rotate_right(0xdeadbeef, 8)的值应该是0xefdeadbe。

// By LYLtim
unsigned rotate_right(unsigned x, unsigned n)
{
	unsigned tmp = x & ((1 << n) - 1);
	x >>= n;
	x += tmp << (32 - n);
	return x;
}

 

转载于:https://www.cnblogs.com/LYLtim/archive/2011/11/10/2244214.html

当涉及到Matlab的基本运算习题时,以下是一些常见的问题和解答: 问题1:如何在Matlab中进行基本的数学运算? 解答:Matlab提供了丰富的数学函数和运算符,可以进行基本的数学运算。例如,可以使用加法运算符(+)进行加法运算,使用减法运算符(-)进行减法运算,使用乘法运算符(*)进行乘法运算,使用除法运算符(/)进行除法运算等等。 问题2:如何计算一个向量的平均值? 解答:可以使用Matlab中的mean函数来计算向量的平均值。例如,如果有一个向量x,可以使用mean(x)来计算它的平均值。 问题3:如何计算一个矩阵的转置? 解答:可以使用Matlab中的transpose函数或者使用单引号(')来计算矩阵的转置。例如,如果有一个矩阵A,可以使用transpose(A)或者A'来计算它的转置。 问题4:如何计算一个矩阵的逆? 解答:可以使用Matlab中的inv函数来计算矩阵的逆。例如,如果有一个矩阵A,可以使用inv(A)来计算它的逆。需要注意的是,只有可逆的方阵才有逆矩阵。 问题5:如何计算一个向量的点积? 解答:可以使用Matlab中的dot函数来计算向量的点积。例如,如果有两个向量x和y,可以使用dot(x, y)来计算它们的点积。 问题6:如何计算一个矩阵的行列式? 解答:可以使用Matlab中的det函数来计算矩阵的行列式。例如,如果有一个矩阵A,可以使用det(A)来计算它的行列式。 问题7:如何计算一个向量的范数? 解答:可以使用Matlab中的norm函数来计算向量的范数。例如,如果有一个向量x,可以使用norm(x)来计算它的范数。 问题8:如何计算一个矩阵的特征值和特征向量? 解答:可以使用Matlab中的eig函数来计算矩阵的特征值和特征向量。例如,如果有一个矩阵A,可以使用[eigenvalues, eigenvectors] = eig(A)来计算它的特征值和特征向量。 希望以上解答对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值