Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 测试位是否在数字中重复_C++_Bit Manipulation - Fatal编程技术网

C++ 测试位是否在数字中重复

C++ 测试位是否在数字中重复,c++,bit-manipulation,C++,Bit Manipulation,我在循环所有长度的I位字符串,想知道如何判断它是否是一个 重复先前的位字符串?基本上我想跳过11,1010,1111,0101,101101等,但不想跳过1011,1100,1000,101001等 这些位字符串是二进制数的周期,因此如果它们重复,它将生成相同的数字,这将抛出我的数据处理程序 重复序列需要相邻,并覆盖所有j,无溢出 skip = false; for(int i = 1; i<=n/2 && !skip; i++){ if(n

我在循环所有长度的I位字符串,想知道如何判断它是否是一个 重复先前的位字符串?基本上我想跳过
11
1010
1111
0101
101101
等,但不想跳过
1011
1100
1000
101001

这些位字符串是二进制数的周期,因此如果它们重复,它将生成相同的数字,这将抛出我的数据处理程序

重复序列需要相邻,并覆盖所有
j
,无溢出

    skip = false;
    for(int i = 1; i<=n/2 && !skip; i++){
        if(n%i == 0){
            skip = true;
            for(int k=1; k<=n/i; k++) {
                if(((j&(j >> (i*k)))&((1<<i) - 1)) != (j&((1<<i) - 1))){
                    skip = false;
                    break;
                }
            }
        }
    }
    if(skip) continue;
skip=false;

对于(inti=1;i(i*k))&(1你可以用完全不同的方式做你想做的事

查看十进制数字以减少混淆。例如,数字4545是数字45的重复。要检测到这一点,可以除以101,然后看到结果小于100

在c++中:

if (j % 101 == 0 && j / 101 < 100)
if(j%101==0&&j/101<100)
现在将底座10替换为底座2:

if (j % 5 == 0 && j / 5 < 4)
if(j%5==0&&j/5<4)
如果位数不是2而是
n


  • 1代替4你可以用完全不同的方式做你想做的事

    查看十进制数字以减少混淆。例如,数字4545是数字45的重复。要检测到这一点,可以除以101,然后看到结果小于100

    在c++中:

    if (j % 101 == 0 && j / 101 < 100)
    
    if(j%101==0&&j/101<100)
    
    现在将底座10替换为底座2:

    if (j % 5 == 0 && j / 5 < 4)
    
    if(j%5==0&&j/5<4)
    
    如果位数不是2而是
    n


    • 将4替换为
      1重复的模式可能只显示为
      n的除数的大小

      所以对于
      n
      偶数,很简单,只需检查两个半位,看看它们是否相同

      bool does_bits_repeat(int n, unsigned b)
      {
          if (n % 2 == 0) {
              const unsigned high = b >> (n / 2);
              // (high & b) is equivalent to (high & low)
              return (high & b) == high;
          } else {
              // ...
          }
      }
      
      奇数部分比较棘手。你必须找到
      n
      并使用
      k
      from

      unsigned k = 1;
      for (int i = 0; i != n; i += d) {
          k = k << d | 1;
      }
      // for n == 15, we have
      //    d == 1, k = binary 111111111111111 (1 repeated 15 times)
      //    d == 3, k = binary 001001001001001 (001 repeated 5 times)
      //    d == 5, k = binary 000010000100001 (00001 repeated 3 times)
      
      无符号k=1;
      对于(int i=0;i!=n;i+=d){
      
      k=k重复模式可能只出现一个大小,该大小是
      n
      的除数

      所以对于
      n
      偶数,很简单,只需检查两个半位,看看它们是否相同

      bool does_bits_repeat(int n, unsigned b)
      {
          if (n % 2 == 0) {
              const unsigned high = b >> (n / 2);
              // (high & b) is equivalent to (high & low)
              return (high & b) == high;
          } else {
              // ...
          }
      }
      
      奇数部分比较棘手。你必须找到
      n
      并使用
      k
      from

      unsigned k = 1;
      for (int i = 0; i != n; i += d) {
          k = k << d | 1;
      }
      // for n == 15, we have
      //    d == 1, k = binary 111111111111111 (1 repeated 15 times)
      //    d == 3, k = binary 001001001001001 (001 repeated 5 times)
      //    d == 5, k = binary 000010000100001 (00001 repeated 3 times)
      
      无符号k=1;
      对于(int i=0;i!=n;i+=d){
      
      k=k仍然不知道这意味着什么:“重复上一个位字符串”
      skip==true;
      什么都不做继续;
      在循环之外什么也不做,而您似乎不知从哪里拉出了变量
      j
      。我们需要更多的信息,了解您正在尝试做什么,以及
      j
      i
      是什么。如果它在循环内部重复,那么它是否等于在循环内部重复多次的其他位字符串。(ex 1010是10重复两次)sry dude,仍然不清楚你想要什么我想清楚,所以不要去投票“不清楚”。读得更好。仍然不知道这意味着什么:“重复上一个位字符串”
      skip==true;
      什么都不做。
      if(skip)继续;
      在循环之外什么也不做,而您似乎不知从哪里拉出了变量
      j
      。我们需要更多的信息,了解您正在尝试做什么,以及
      j
      i
      是什么。如果它在循环内部重复,那么它是否等于在循环内部重复多次的其他位字符串。(ex 1010是10重复两次)sry dude,你还不清楚你想让我清楚什么,所以不要去投票“不清楚”。读得更好。我需要检查所有
      iSo的
      I
      位字符串的重复,如果我理解正确,那么它的代码将是
      if(j*((1我需要检查所有
      iSo的
      i
      位字符串的重复性,如果我理解正确,那么它的代码将是
      if(j*)((1