C語言中的位運算符可以處理負數,但是需要注意的是,這些運算符實際上是在處理二進制補碼表示的整數。
在C語言中,有32位整數,當對負數進行位運算時,它會被轉換為32位二進制補碼形式。例如,-5的二進制補碼表示為:11111111 11111111 11111111 11111101
(這里假設我們使用的是8位表示,實際上在32位系統中會有更多的1)。
位運算符包括按位與(&)、按位或(|)、按位異或(^)、按位取反(~)和左移(<<)和右移(>>)。這些運算符在處理負數時,會按照二進制補碼的形式進行計算。
例如:
#include <stdio.h>
int main() {
int a = -5;
int b = -3;
printf("a & b = %d\n", a & b); // 結果為 -5
printf("a | b = %d\n", a | b); // 結果為 -3
printf("a ^ b = %d\n", a ^ b); // 結果為 -2
printf("~a = %d\n", ~a); // 結果為 4294954943
printf("a << 1 = %d\n", a << 1); // 結果為 -10
printf("b >> 1 = %d\n", b >> 1); // 結果為 -2
return 0;
}
在這個例子中,我們可以看到位運算符在處理負數時,會按照二進制補碼的形式進行計算。