2017-02-23 40 views
0

我試圖創建一個返回給定整數的二進制等價函數。但考慮到1234的測試輸入時,它同時返回給定輸入的二進制和左移版本的二進制文件的不正確的值:我的C函數沒有返回正確的int到二進制值

Enter a base-10 integer: 1234 
Enter number of places to shift bit: 8 

1234 1421075418 
315904 1826920960 

定值,並左移值是正確的,但二進制等效不是。

int showbits(int value) { 
    return (value == 0 || value == 1 ? value : ((value % 2) + 10 * showbits(value/2))); 
} 

void left_bit_shift() { 
    int value = get_single_base_10(); 
    int number_shift = get_number_shift(); 
    int bit_value = showbits(value); 

    int left_shifted_value = value << number_shift; 
    int left_shifted_bit = showbits(left_shifted_value); 

    printf("%d %d\n", value, bit_value); 
    printf("%d %d", left_shifted_value, left_shifted_bit); 
} 

int get_single_base_10() { 
    int value; 
    printf("Enter a base-10 integer: "); 
    scanf("%d", &value); 
    return value; 
} 

int get_number_shift() { 
    int shift; 
    printf("Enter number of places to shift bit: "); 
    scanf("%d", &shift); 
    return shift; 
} 
+0

可能重複的[如何通過printf打印二進制數](http://stackoverflow.com/questions/6373093/how-to-print-binary-number-via-printf) – jdigital

+0

您已經向我們展示了實際輸出,但預期的輸出是什麼? 「showbits」應該做什麼?你是否嘗試過使用調試器來遍歷代碼(當你這樣做時,有助於使代碼變得簡潔,例如將'showbits'單行分成多行並使用臨時變量)? –

+0

你的意思是你想顯示一個給定的整數的二進制?這是[使用C在二進制表示中打印int]的副本(http://stackoverflow.com/questions/1024389/print-an-int-in-binary-representation-using-c) –

回答

1

由於1234二進制是10011010010不能存儲在設備上的整數的變量。如果您將退貨類型showbits()更改爲長期,則可能會起作用。但這不是獲得二進制值的永久解決方案。