Home > Интернет, Кодинг, С++ > Отрицание в СPP

Отрицание в СPP

На днях прогу писал на сишке. В ней надо было из строки удалить все повторяющиеся симолы. В цикле проходил посимвольно и заменял на `~` все повторяющиеся кроме первого. И была проверка, является ли сивол тильдой. (Если да, то ничего не меняем)

Вот такая:

if(string[i] = !string[j])

В этой строчке крылась ошибка. Если посмотреть последовательность выполнения этой проверки, то она будет вовсе не “если string[i] не равно string[j]”,  а “если string[i] равно не string[j]”. Причем так как было всего один знак “=”, то в проверке происходило присвайвание. Поэтому в выходном файле была пустая строка.

Захотелось разобраться, как происходит отрицание, что заноситсяв переменные при разных значениях

int main(int argc, char* argv[])
{
char a, b;
a = 1;
b = !a;
printf(“a = %d “, a);
printf(“b = %d “, b);
getch();
return 0;
}

Вот как-то так. И результаты таковы:

если a=0, то b = 1

если a=1, то b = 0

если a не равно ни нулю ни единице,то b всегда 0.

Теория.

Поскольку каждое число в памяти пк представляется как двоичное. Как-нибудь так 01110110, то, по идее, инверсия этого очисла будет таким 10001001, а не 00000000.

Конец=)

Advertisements
  1. Obi-Wan_Kenobi
    12.02.2009 at 10:34

    В С ++ получается, что вместо любого ненулевого числа кроме нуля больше ниче и не присваевается, видимо из-за понятий истина(1) и ложь(0), лежащих в основе инверсии(если я не ошибаюсь)

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: