【问题标题】:printing a 64bit value in C在 C 中打印一个 64 位的值
【发布时间】:2017-06-02 22:10:57
【问题描述】:

我正在使用 ubuntu x86_64 机器并尝试设置与字符串中的字符相对应的位位置。

字符可以是 a-z 或 A-Z,所以我保留了一个 64 位向量。

long unsigned int vector = 0x0;
char *getunqchar(char a[]) {
    char str[30];
    int i;
    long unsigned int t, test = 0;
    for (i = 0; i < strlen(a) - 1; i++) {
        t = (long unsigned int)(a[i]) - 65;
        printf("t is %ld", t);
        test = (long unsigned int)(1 << t);
        vector = (vector ) | test;

        printf("vec is %ld %ld \n", (long unsigned int)vector, (long unsigned int)test);
    }
}

int main() {
    int i = 0;
    char name[30], *temp;
    int cnt[52], t;

    memset(cnt, 0, sizeof(cnt));
    printf("vec is %lx", vector);
    printf("Enter the string name: ");
    fgets(name, sizeof(name), stdin);

    temp = getunqchar(name);
}

当我像下面这样输入时:

Enter the string name: mAn
t is 44vec is 4096 4096
t is 0vec is 4097 1
t is 45vec is 12289 8192

t 的值为44,我希望输出为2^44,但我得到的是2^124432 + 12。由于 64 位,这似乎是一些问题。但我没有得到。任何帮助表示赞赏。

【问题讨论】:

  • 你在标题中说“in C”,但也标记了C++。语言可能非常不同,一种解决方案可能不适用于另一种。

标签: c bit-manipulation 32bit-64bit


【解决方案1】:

1 &lt;&lt; t 被评估为int,使用1UL &lt;&lt; t 评估为unsigned long

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 2023-03-11
    • 2011-05-13
    相关资源
    最近更新 更多