2013-03-16 43 views
-2

我在做一個程序,演示如何在二進制代碼中進行除法。C中的除法程序

#include <stdio.h> 
#include <stdlib.h> 

unsigned int division(unsigned int a, unsigned int b) // fonction division 
{ 
    int i; 
    b = (b << 16); 
    for(i = 0; i <= 15; i++) 
    { 
     a = (a << 1); 
     if(a >= b) 
     { 
      a = a - b; 
      a = a + 1; 
     } 
    } 
    return a; 
} 

int main() 
{ 
    unsigned int i, a, b, d, N; 
    unsigned short c; 

    FILE* rep; 
    rep = fopen("reponse.txt", "w"); /* ouverture du fichier */ 

    printf("Entrer le nombre de division a effectuer"); 
    scanf("%i", &N); 

    printf("Veuillez inserer la ou les divisions a effectuer\n"); 
    printf("de la facon suivante : a/b\n"); 

    for(i = 1; i <= N; i++) 
    { 
     scanf("%i/%i", &a, &b); /* il suffira d'entrer a/b */ 
      d = division(a, b); /* la division de a par b */ 
      c = unsigned short(d); /* les 16 premiers bits */ 
      d = (d >> 16); /* les 16 premiers bits */ 
      fprintf(rep, "division %i : %i/%i = %d reste %i\n", i, a, b, c, d); 
    } 
    fclose(rep); /* fermeture du fichier */ 
    return 0; 
} 

它顯示我error: expected expression before 'unsigned'在這一行c = unsigned short(d); 我不知道到底出了什麼問題! 有人可以幫我嗎?我是在Linux操作系統Ubuntu 12.10編碼上的代碼::塊

+1

在這一行中打算做什麼c = unsigned short(d);? – 2013-03-16 21:30:05

+0

簡單地將一個整數轉換成一個短值不會給你前16位。 嘗試使用結構來保留餘數。我不是法國人,所以不知道你想達到什麼目的。 – flyingOwl 2013-03-16 21:30:16

+1

C'est pas cool les commentaires enfrançaispour lacommunauté... division ==> – Aubin 2013-03-16 21:30:17

回答

4
c = unsigned short(d); 

這不是C.

從一種類型轉變爲另一種可以使用的類型轉換操作符:

c = (unsigned short) d; 

請注意,由於在unsigned intunsigned short之間存在隱式轉換,因此不需要投射並且這是等同的:

c = d; 
+0

謝謝:)其他問題/ bin/sh:l:g ++:編譯時未找到 – mpluse 2013-03-16 21:29:52

+0

With -Wall -pedantic,c = d;產生一個警告,演員是必要的,至少爲了可讀性。 – Aubin 2013-03-16 21:32:59

+0

@Aubin'gcc'可以自由地打印額外的診斷信息,但C不需要執行在這裏輸出'c = d;'的診斷信息。 – ouah 2013-03-16 21:35:59