C# 仅当整数二进制表示的位数大于给定值时,才移动整数的位
只有当位数大于某个数字时,我才需要将整数的位数右移。以10为例 如果整数是818,那么整数的二进制表示形式是C# 仅当整数二进制表示的位数大于给定值时,才移动整数的位,c#,C#,只有当位数大于某个数字时,我才需要将整数的位数右移。以10为例 如果整数是818,那么整数的二进制表示形式是1100110010,在这种情况下,我什么也不做。 如果整数为1842,则整数的二进制表示形式为11100110010,大于10乘以1,因此我需要向右移动一位(或者将索引10处的位设置为0,据我所知,这会给出相同的结果,可能我错了)。 到目前为止,我所做的是使一个由1和0组成的整数数组表示int,但我确信有更优雅的方法来实现这一点 int y = 818; string s
1100110010
,在这种情况下,我什么也不做。
如果整数为1842,则整数的二进制表示形式为11100110010
,大于10乘以1,因此我需要向右移动一位(或者将索引10处的位设置为0,据我所知,这会给出相同的结果,可能我错了)。
到目前为止,我所做的是使一个由1和0组成的整数数组表示int,但我确信有更优雅的方法来实现这一点
int y = 818;
string s = Convert.ToString(y, 2);
int[] bits = s.PadLeft(8, '0')
.Select(c => int.Parse(c.ToString()))
.ToArray();
if (bits.Length > 10)
{
for (int i = 10; i < bits.Length; i++)
{
bits[i] = 0;
}
}
inty=818;
字符串s=Convert.ToString(y,2);
int[]位=s.PadLeft(8,'0')
.Select(c=>int.Parse(c.ToString()))
.ToArray();
如果(位长度>10)
{
for(int i=10;i
我也试着这样做:
if(bits.Length>10){y=y>>(bits.Length-10)}
但由于某种原因,当输入为1891时,我得到了945(
1110110001
)不需要对字符串执行此操作。2到10的幂有11个二进制数字,所以
if (y >= Math.Pow(2, 10))
{
y = y >> 1;
}
似乎可以执行您想要的操作。位为10=0的AND数字:number=number&0xFFFFFDFF@ATT:您似乎正在清除所有高位,而不是进行任何移位。你确定你不想要简单的(
y&=0x3FF
)吗?如果(y>=(1)不需要每次重新计算-如果(y>=1024)
就足够了。@ThomasSchremser:编译器应该计算(1@BenVoigt)你是正确的;我更多的是指数学.Pow(2,10)
part.很抱歉没有更清楚地表达这一点。我不知道为什么我被否决了。我同意可以简化它,但提问者明确表示10不是一个固定的数字,所以我展示了一种在当时计算条件的方法。@YellowAfterlife的建议是一种改进。