2012-07-20 20 views
16
#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    int i=-5; 
    while(~(i)) 
    { 
     cout<<i; 
     ++i; 
    } 

} 

Çıkış -5, -4, -3, -2'dir. Değerleri -1'e kadar basmamalı Neden sadece -2'ye kadar. Ve lütfen 'not' ve 'negation' operatörleri arasındaki farkı açıklayınız. Bir program yazarken onlar hataların kaynağıydı.NOT (~) vs NEGATION (!)

while(i) 

ben döngü koşulu idam Ne 'i' yukarıdaki iki döngüler değerleri için 0.

while(!i) vs while(~i) 

hariç pozitif ve negatif ı yıllardan için de geçerli olacağını biliyoruz? i-1 aldığında

+0

Eğer 'arasındaki fark hatırlayamazsanız 0 -1 1 -2 !' ve '~', kullanım '!'. Neredeyse her zaman isteyeceğin bir şey. '~' nadiren gereklidir. – duskwuff

+1

Doğru yanıt zaten gönderildiği için size yararlı olabilecek ipucu. (Modüler) tamsayı türleri için, '~ i == -i - 1 '. –

+3

Operatörlerin aslında C++ 'da isimleri var: '' '' '' '' '' '' '' 'compl'. (Küçük harf, büyük harf değil) – MSalters

cevap

24

, ~i değeri ~-1, ya da 0, yani while döngü duracaktır. ! operatörü, tamamen farklı bir şey yaptığından çalışır; diğer tüm değerler için 0 değerleri ve 0 için 1 sonuçlanır. ~, bitsel bir olumsuzlamadır.

ayrıntılı olarak biraz daha fazla:

  • ~ bir dizi her bit alır ve geçiş yapar. Yani, örneğin, 10010 bir ikinin tamamlayıcısı tamsayı imzalarken 01101
  • -1 ikilik sistemde tüm olanları olduğu olacaktı.
  • ~0b…11111111, 0'dir.

Ancak:

  • !0!anythingElse0
  • -10
  • !-1 hala 0

olduğu değil Ve aslında l istiyorsanız, 1 olduğunu i == -1 dahil olmak üzere, while (~i) yerine while (i) kullanın.

5

Sen i == -1 çıkış koşulu olma konusunda doğru: -1 ilk yazdırılır değeri baskılı değil neden, açıkça belli olmalıdır bu şekilde yazılır ve ancak o zaman artırılır ne zaman döngü

int i=-5; 
while(i != -1) 
{ 
    cout<<i; 
    ++i; 
} 
// i == -1 immediately after the loop 

eşdeğerdir Bu yüzden yazdırdığınız son değer -2'dur.

! operatörü, 1 yalnızca sıfır verildiğinde üretecektir. Bu nedenle, döngü, ! işleci döngü koşulunda kullanıldığında, döngü -1 yazdıracaktır.

2

'~', aşağıdaki gibidir: ~ x = -x-1 ve ne zaman i = -1, sonra ~ i = 0.

#include <iostream> 

using namespace std; 
int main(int argc, char *argv[]) 
{ 
    int i=-5; 
    for (int i = -5; i <= 3; i++) 
    { 
    cout<<i<<" "<<(~i)<<endl; 
    } 
} 

ve sonra bulacaksınız: Eğer ~ değerini acaba I, sadece bunları yazdırabilir -5 4 -4 3 -3 2 -2 1 -1 0 2 -3 3 -4