13、C語言原碼反碼補碼,按位取反~操作符

//目標:有效代碼3萬行 ? 量變引起質(zhì)變
//算數(shù)操作符:+ ? - ? * ? /
//移位操作符:>> ? ?<<
//位操作符:&按位與 ? ? |按位或 ? ? ^按位異或
//賦值操作符:= ? ? += ? ? ?-= ? ? ?*= ? ? ?/= ? ? ?&= ? ? ?^= ? ? ?|= ? ? ?>>= ? ? <<= ?
//整數(shù)在內(nèi)存中存儲的是補碼
//一個整數(shù)的二進制有3種:例如 -1
//原碼 ? ? ?最高位是符號位 ? ? ? ? ?10000000 00000000 00000000 00000001
//反碼 ? ? ?符號位不變,其他取反 ? ?11111111 11111111 11111111 11111110
//補碼 ? ? ?反碼+1 ? ? ? ? ? ? ? ? 11111111 11111111 11111111 11111111
//如果是正數(shù),原碼反碼補碼相同
#include <stdio.h>
int main(int argc, char* argv[])
{
? ? int a =0; ? //0的補碼00000000 00000000 00000000 00000000
? ? printf("\r\n---------------------\r\n");
? ? printf("~a =%d\r\n",~a); ? ?//按位取反(所有二進制位中的1變0,0變1) ? ? ~00000000 00000000 00000000 00000000=11111111 11111111 11111111 11111111
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //補碼11111111 11111111 11111111 11111111-->原碼10000000 00000000 00000000 00000001
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //printf打印%d的是原碼,內(nèi)存存儲的是補碼
? ? printf("\r\n---------------------\r\n");
? ? return 0;
}