c - 在 C 中打印 64 位值

标签 c bit-manipulation 32bit-64bit

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

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

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^12 . 4432 + 12。由于 64 位,这似乎是一些问题。但我没有得到。感谢您的帮助。

最佳答案

1 << t被评估为 int , 使用 1UL << t评估为 unsigned long .

关于c - 在 C 中打印 64 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41720990/

相关文章:

c++ - "0xffffffff00000000"是否表示 32 位和 64 位编译之间存在混淆?

c - 使用 pthread 时如何检查线程是否终止?

c - 服务器-客户端模型问题

c - 在 C 中使用函数初始化数组变量

c# - C# 中的按位赋值运算符

xcode - 创建通用应用程序时,如何链接到32位和64位版本分开的框架?

vbscript - 我可以在 64 位进程中使用 32 位 COM 对象吗?反之亦然?

c++ - 通过套接字接收灵活的数组

c# - 如何确定一个位序列是正数还是负数

c - 如果 Arduino 的库有 32 位限制,我如何在 Arduino 上输出 64 位数字?