【C語言筆記】<八>源碼補碼反碼及位運算

源碼補碼反碼
int main(int argc, const char * argv[])
{
//    int占4個字節(jié) 1個字節(jié)8位
    int num = 12;
    /*
//     12的二進制
     12在內(nèi)存中存儲的是它的補碼
     00000000  00000000 00000000 00001100
     正數(shù)的特點:(三碼合一) 正數(shù)的原碼就是TA的反碼就是TA的補碼
     
     
     -12
     二進制的最高位我們稱之為符號位 
     如果符號位是0代表是一個正數(shù),
     如果符號位是1代表是一個負數(shù)
     
     10000000  00000000 00000000 00001100 (-12的原碼)
     11111111  11111111 11111111 11110011(反碼, 符號位不變其它位取反)
     
     11111111  11111111 11111111 11110011
    +00000000  00000000 00000000 00000001
     _____________________________________________
     11111111  11111111 11111111 11110100(補碼 , 反碼+1)
     
     結論:無論正數(shù)負數(shù)在內(nèi)存中存儲的都是補碼
     
     
     
     11111111  11111111 11111111 11110101 (補碼)
    -00000000  00000000 00000000 00000001  (-1)
     _____________________________________________
     11111111  11111111 11111111 11110100 (反碼)
     10000000  00000000 00000000 00001011
     
     
     */
    printf("%d\n", 0b11111111111111111111111111110101);
    return 0;
}

位運算
/*
 位運算都是針對二進制的
 &
 |
 ^
  ~
 
 
 <<
 >>
 */
int main(int argc, const char * argv[])
{

    /*
     & 按位與
     特點:只有對應的兩位都是1才返回1 否則返回0
     口訣: 一假則假
     規(guī)律:任何數(shù)按位與上1結果還是那個數(shù)
     
     1001
     & 0101
     _______
     0001
     
     
      1001
     &1111
     ______
      1001
     */
    
    /*
     | 按位或
     特點:只要對應的兩位其中一位是1就返回1
     口訣:一真則真
     
     1001
     | 0101
     ________
     1101
     */
    /*
     
     
     ^ 按位異或
     特點:對應的兩位不相同返回1 相同返回0
     
     1001
     ^ 0101
     _______
     1100
     
     //     多個整數(shù)按位異或的結果和順序無關
     1001
     ^ 0101
     _______
     1100
     
     1100
     ^ 0110
     _______
     1010
     
     1001
     ^ 0110
     _______
     1111
     
     1111
     ^ 0101
     _______
     1010
     
     
     //     相同整數(shù)按位異或結果是0
     1001
     ^ 1001
     _______
     0000
     
     //     任何整數(shù)按位異或上0結果不變
     1001
     ^ 0000
     _______
     1001
     
     //     任何整數(shù)按位異或上另一個整數(shù)兩次結果還是那個數(shù)
     1001
     ^ 1001
     ____________
     0000
     
     0000
     ^0101
     ______
     0101
     
     */
//    int result = 9 & 5;
//    int result = 9 | 5;

//    int result = 9 ^ 5;
//     多個整數(shù)按位異或的結果和順序無關
//    int result2 = 9 ^ 5 ^ 6;
//    int result2 = 9 ^ 6 ^ 5;
//    相同整數(shù)按位異或結果是0
//    int result3 = 9 ^ 9;
//    任何整數(shù)按位異或上0結果不變
//    int result4 = 9 ^ 0 ;
//    任何整數(shù)按位異或上另一個整數(shù)兩次結果還是那個數(shù)
//    int result5 = 9 ^ 9 ^ 5;
//    int result6 = 9 ^ 5 ^ 9;
//    printf("result = %d\n", result6);
    
    /*
     ~ 按位取反
     特點: 0變1 1變0
     
     0000 0000 0000 0000 0000 0000 0000 1001
     ~1111 1111 1111 1111 1111 1111 1111 0110 (補碼)
     0000 0000 0000 0000 0000 0000 0000 0001
     ______________________________________________
     1111 1111 1111 1111 1111 1111 1111 0101 (反碼)
     1000 0000 0000 0000 0000 0000 0000 1010
     
     */
    
    //    int result = ~9;
    ////    printf("result = %d\n", result);
    //    printf("%d\n",0b11111111111111111111111111110110);
    return 0;
    
}
左移右移
int main(int argc, const char * argv[]) {
    
    /*
     << 左移
     
     a << n 把整數(shù)a的二進制位往左邊移n位
     移出的位砍掉,低位補0, 發(fā)現(xiàn)左移會把原有的數(shù)值變大
     9 << 1 = 18  9 * 2(1) = 18
     9 << 2 = 36  9 * 2(2) = 26
     9 << n =  9 * 2(n)
     左移的應用場景:當要計算某個數(shù)乘以2的n次方的時候就用左移,效率最高
     
     0000 0000 0000 0000 0000 0000 0000 0000
     100 0000 0000 0000 0000 0000 0000 10010
     
     注意點:左移有可能改變數(shù)值的正負性
     */
    
    /*
     
     >> 右移
     
     a >> n 把整數(shù)a的二進制位往右邊移n位
     移出的位砍掉, 缺少的以為最高位是0就補0是1就補1(是在當前操作系統(tǒng)下)
     9 >> 1 = 4  9 / 2(1) = 4
     9 >> 2 = 2  9 / 2(2) = 2
     右移的應用場景:當要計算某個數(shù)除以2的N次方的時候就用右移,效率最高
     0000 0000 0000 0000 0000 0000 0000 0000
     000000 0000 0000 0000 0000 0000 0000 10
     
     */
    //    int result = 9 << 2;
    int result = 9 >> 2;
    printf("result =  %d\n", result);
    return 0;
}

變量存儲細節(jié)
int main(int argc, const char * argv[]) {
    // 變量為什么要有類型? 每種類型占用的內(nèi)存空間不一樣 int 4, char 1 double 8
    // 只要定義變量, 系統(tǒng)就會開辟一塊存儲空間給我們的變量存儲數(shù)據(jù), 內(nèi)存尋址是從大到小
    // 越先定義的變量, 內(nèi)存地址越大
    // 變量的地址就是所占的存儲空間最小的字節(jié)地址
    
    int num;
    // 注意: 由于內(nèi)存尋址是從大到小, 所以存儲數(shù)據(jù)也是從大到小的存儲(先存儲二進制的高位, 再存儲低位)
    //  高位   -->                    低位
    // 00000000 00000000 00000000 00001001
    num = 9; // 9 -->二進制 -->存儲(補碼)
    int value;
    value = 600; //00000000 00000000 00000010 01011000
    // %p是輸出地址
    // &變量名稱, 是取出變量的地址
    printf("num = %p\n", &num);
    printf("value = %p\n", &value);
    
    // 獲取存儲的每一位
    char *c = &value;
    for (int i = 0; i < sizeof(num); i++) {
        int result = c[i]; // 取出每個字節(jié)中存儲的數(shù)據(jù)
        printf("%i\n", result);
    }
    
    return 0;
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驹碍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子搪泳,更是在濱河造成了極大的恐慌,老刑警劉巖伙单,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钾腺,死亡現(xiàn)場離奇詭異,居然都是意外死亡腾它,警方通過查閱死者的電腦和手機力惯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門碗誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人父晶,你說我怎么就攤上這事哮缺。” “怎么了诱建?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵蝴蜓,是天一觀的道長碟绑。 經(jīng)常有香客問我俺猿,道長,這世上最難降的妖魔是什么格仲? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任押袍,我火速辦了婚禮,結果婚禮上凯肋,老公的妹妹穿的比我還像新娘谊惭。我一直安慰自己,他們只是感情好侮东,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布圈盔。 她就那樣靜靜地躺著,像睡著了一般悄雅。 火紅的嫁衣襯著肌膚如雪驱敲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天宽闲,我揣著相機與錄音众眨,去河邊找鬼握牧。 笑死,一個胖子當著我的面吹牛娩梨,可吹牛的內(nèi)容都是我干的沿腰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼狈定,長吁一口氣:“原來是場噩夢啊……” “哼颂龙!你這毒婦竟也來了?” 一聲冷哼從身側響起纽什,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤厘托,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后稿湿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铅匹,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年饺藤,在試婚紗的時候發(fā)現(xiàn)自己被綠了包斑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涕俗,死狀恐怖罗丰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情再姑,我是刑警寧澤萌抵,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站元镀,受9級特大地震影響绍填,放射性物質發(fā)生泄漏。R本人自食惡果不足惜栖疑,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一讨永、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遇革,春花似錦卿闹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揪漩,卻和暖如春旋恼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氢拥。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工蚌铜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锨侯,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓冬殃,卻偏偏與公主長得像囚痴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子审葬,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容