2012-10-29 100 views
-4
double a = 5; 
double b = 3; 
double c = a+b^2; 
printf("%f",c); 

我正在使用NetBeans(os:ubunut)。使用gcc進行c編程的編譯錯誤64位

當我嘗試這個程序它沒有給出編譯錯誤。一點也不。

它只是不運行它,並說程序失敗。

爲什麼沒有編譯錯誤?是因爲編譯器還是因爲我在NetBeans中的設置?

enter image description here

+0

請出示完整的程序。如果這就是C文件中的所有內容,那麼它不是一個完整的程序,並且不能運行。 – Mat

+0

看我把它。 – wantToLearn

+0

這還不是一個完整的程序。它缺少你的'main'並且包含。 – Mat

回答

1

bitwise操作僅適用於integral操作

由於bdouble^bitwise運營商,所以它給錯誤

+0

爲什麼我沒有錯誤? – wantToLearn

+0

可能是由於netbeans中的一些設置...嘗試gcc或任何std編譯器或檢查NetBeans中的編譯器和錯誤設置 – Omkant

0

我懷疑NetBeans是對你進行類型轉換。

double a = 1; 
double b = 1; 
double c = a+b^2; 

是無效的C代碼,二進制按位XOR運算符(^)僅適用於charint類型;把這些代碼放在像gcc這樣的基本編譯器中,它會給你一個error: invalid operands to binary^(have ‘double’ and ‘int’)

這有可能是NetBeans的這樣做是這樣的:

double c = a+((int)b^2); // if you get an output of 4.0 

double c = (int)a+(int)b^2; // if you get an output of 0.0 

我真的不知道,但它沒有太大的關係。你知道(現在)它是無效的代碼,所以我建議不要這樣做。


現在,如果你不嘗試進行XOR b和2,而是提高到b兩個電源,這是不同的。 ^不是這樣使用的。

你有兩種選擇來提高權力。首先,你可以簡單地做:

double c = a+b*b; //this is b^2 + 1 

或者更一般地,你可以使用pow()功能從math.h

double c = a + pow(b, 2); 
+0

提問者很可能試圖平方'b'並應該使用'double c = a + b * b;'。 –

+0

@EricPostpischil - 嗯,好點,我沒有考慮到這一點。我會更新 – Mike

+0

,但不知道設置?不知道在我的設置中是否有需要改變的地方或什麼? – wantToLearn