数字的二进制。如何检查相等的数字系列?

Posted

技术标签:

【中文标题】数字的二进制。如何检查相等的数字系列?【英文标题】:Binary of a number. How to check for equal series of digits? 【发布时间】:2021-12-31 11:43:38 【问题描述】:

这是我的代码。我想要做的是将一个数字转换成他的二进制,如果有一系列相等的数字来 cout false 否则 cout true。例如,数字是 7,它是二进制 111,它应该 cout 为假。但是如果数字是 10,它的二进制是 10000,应该是假的,所以我的代码是真的,我不知道我的错误在哪里。

#include <iostream>
using namespace std;

void hasAlternatingBits(unsigned n) 
    int* a = new int[n];
    int i;
    for (i = 0; n > 0; i++)
    
        a[i] = n % 2;
        n = n / 2;
    
    /*for (i = i-1; i >= 0; i--)
    
        cout << a[i];
    */
    int arrSize = sizeof(a) / sizeof(a[0]);
    for (int i = 0; i < arrSize; i++) 
        if (a[i] != a[i + 1]) 
            cout << "true";
        
        else 
            cout << "false";
        
    
    delete[] a;


int main() 
    int n;
    cin >> n;
    hasAlternatingBits(n);
    return 0;

【问题讨论】:

请用准确的话解释您的问题,因为“相等的数字系列”不清楚,而且您的两个示例都是......错误的? 相等的数字序列是 0,0 或 1,1。在整个数组中,我应该至少有 2 个相等的系列,比如 10110 - 这里我应该打印 false,因为我有 1,1。 True 是 101, 1, 0。 new int[n] 分配过多。例如 7 是 0b111,它的二进制长度是 3。改为声明 new int[64]。接下来,i 必须初始化为 0 并递增。这会给你计数。接下来,sizeof(a) 是指针的大小。数到arraySize - 1,因为您要求[i + 1] 又不行了。 请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

让我们从这段代码开始:

int* a = new int[n];
int i;
for (i = 0; n > 0; i++)

    a[i] = n % 2;
    n = n / 2;

除了你过度分配 a 的事实,我猜这没关系。

然而,这很奇怪:

int arrSize = sizeof(a) / sizeof(a[0]);

这就是我要做的。我会更改一些变量名。

int arraySize;
for (arraySize = 0; n > 0; arraySize ++)

    a[arraySize] = n % 2;
    n = n / 2;

然后完全摆脱int arrSize,因为变量arraySize 具有您存储在数组中的确切数字。请注意,您计算 arraySize 的版本存在缺陷。

接下来,这个循环:

for (int i = 0; i < arraySize; i++) 
    if (a[i] != a[i + 1]) 
        cout << "true";
    
    else 
        cout << "false";
    

您将引用已存储变量的末尾。你可以尝试的是:

bool theyAllAlternate = true;
for (int i = 1; theyAllAlternate && i < arraySize; ++i) 
    if (a[i-1] == a[i]) 
        theyAllAlternate = false;
    

然后根据theyAllAlternate的值输出。但是,我实际上不明白这是否是您真正想要做的。根据位是否从一个数字翻转到另一个数字,您的代码会打印出一系列真/假、真/假——但您超出了位的末尾。

我不确定这就是你真正想要的。

另请注意:十进制 10 == 二进制 1010。(8 + 2)。

【讨论】:

以上是关于数字的二进制。如何检查相等的数字系列?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何把16进制字符串转成值相等的byte数组?

如何有效地检查数字二进制表示中所有下一位是不是不同?

如何在C#中检查数字是不是可以被另一个数字整除而没有条件检查(如果,三进制等)

如何在C中检查十六进制数(%x)是否以某个数字开头?

如何检查数组中的数字是不是相等?

如何在javascript中检查两个数字是不是相等[重复]