اپراتور ~ (Bitwise NOT) در زبان C

اپراتور ~ (Tilde) یا Bitwise NOT یا Bitwise Complement یک اپراتور نقیض یا مکمل یک می‌باشد و این یک اپراتور Unary در زبان سی و سی++ است که وظیفهٔ آن برعکس کردن تمام بیت‌ها است (صفر کردن تمام یک‌ها و یک کردن تمام صفرها). مثلا در یک عدد صحیح ۸ بیتی (مانند دادهٔ char در زبان C)، عدد 19 برابر است با 00010011. اگر با اپراتور Bitwise NOT روی آن تغییر ایجاد کنید این عدد برابر 11101100 می‌شود (یک‌ها به صفر و صفرها به یک تبدیل می‌شود)؛ که به نظر می‌رسد معادل دسیمال آن برابر 236 شود. اما وقتی آنرا چک می‌کنید برابر 20- است. اما چرا؟ برای دانستن این موضوع باید در مورد مکمل دو (Two’s Complement) اطلاعاتی داشته باشید. در این لینک توضیحاتی درمورد آن ارائه شده است. توجه داشته باشید که کامپیوترهای امروزی از نمایش مکمل دو (Two’s Complement Representation) استفاده می‌کنند. این عدد به عنوان یک عدد صحیح علامت‌دار درنظر گرفته می‌شود و سپس با استفاده از سیستم مکمل دو به نمایش گذاشته می‌شود.

#include <stdio.h>

int main()
{
    char a = 19;
    printf("%d\n", ~a);

    return 0;
}

Output:

-20

درضمن می‌توانید بجای اپراتور Increment (++) نیز از آن استفاده کنید (قبلا در این لینک به آن اشاره‌ای شده بود).

#include <stdio.h>

int main()
{
    char a = 19;
    a = -~a;  // a++;
    printf("%d\n", a);

    return 0;
}

Output:

20