2017-01-18 2 views
0

Я использую машину ubuntu x86_64 и пытаюсь установить позицию бита, соответствующую символу в строке.печать 64-битного значения в C

Символ может быть 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 

t44 значение, я ожидаю выход как 2^44 но я получаю 2^12. 44 является 32 + 12. Кажется, это проблема из-за 64 бит. Но я не понимаю. Любая помощь приветствуется.

+2

Вы говорите «в C» в названии, но также и тег C++. Языки могут быть очень разными, а решения в одном могут не работать в другом. – crashmstr

ответ

2

1 << t оценивается как int, используется 1UL << t для оценки unsigned long.

Смежные вопросы