char val =2;
char test =0;
unsigned char unval =0;
test =
~val;
unval =
~val;
printf
("val5 = %d\n"
, test)
;printf
("val5 = %d\n"
, unval)
;
2、結果如下:
3、簡要分析:
變數val的值為2,其在計算機內部是以補碼的形式存在的
原碼:0000 0010
反碼:0000 0010
補碼:0000 0010
~val取反後,(是對補碼進行取反)
補碼:1111 1101
反碼:1111 1100
原碼:1000 0011 = -3
所以將char val取反後賦值給char test,其值為-3;
但將其取反後賦值給unsigned char unval,涉及到同型別的有符號向無符號轉換,值為-3 + 28 = 253;
- 取相反數 (-)
此時的「-」是作為符號運算子,屬於一元運算子,
1、簡單**測試:
// an highlighted block
char val =-2
; char test =
-128
; unsigned char unval1 =2;
unsigned char unval2 =
128;
val =
-val;
test =
-test;
unval1 =
-unval1;
unval2 =
-unval2;
printf
("-val = %d\n"
, val)
;printf
("-test = %d\n"
, test)
;printf
("-unval1 = %d\n"
, unval1)
;printf
("-unval1 = %d\n"
, unval2)
;
2、結果如下:
3、簡單結果分析一:
因為是一元運算子,對其取相反數現在也不太明白具體是如何實現的,只說說我的理解,簡單粗暴,可能不對,但對大多數情況都適用
在負號前面加0,進行減法運算(0-資料補碼)
如val = -2
原碼:1000 0010
反碼:1111 1101
補碼:1111 1110
求相反數,-val = 2
即0000 0000 - 1111 1110 = 0000 0010 (等於2)
如test =-128
補碼:1000 0000
求相反數 -test = -128
即0000 0000 - 1000 0000 = 1000 0000 (等於-128)
後面的資料轉換與上述分析類似;
4、簡單結果分析二
相反數直接關於環形對稱。同樣其他的資料型別也是同樣的性質,只是資料範圍變大了。簡單粗暴!
C語言萌新手記 相反數
練習進行時,ccf題號201403 1 相反數 這或許就是傳說中ccf的簽到題吧 然而昨天晚上貿然挑戰201312 2感覺還是自己菜得不行,就放棄了 逃 今天做個 簽到題 給自己找點信心哈哈哈。問題描述 有 n 個非零且各不相同的整數。請你編乙個程式求出它們中有多少對相反數 a 和 a 為一對相反數...
CCF201403 1相反數(C語言)
問題描述 有 n 個非零且各不相同的整數。請你編乙個程式求出它們中有多少對相反數 a 和 a 為一對相反數 輸入格式 第一行包含乙個正整數 n。1 n 500 第二行為 n 個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同。輸出格式 只輸出乙個整數,即這 n 個數中包含...
演算法設計與分析 求多少對相反數(C 實現)
求多少對相反數。有n個非零且各不相同的整數。請你編乙個程式求出它們中有多少對相反數 a和 a為一對相反數 時間限制為1.0s,記憶體限制 256mb。輸入格式 第一行包含乙個正整數n 1 n 500 第二行為n個用單個空格隔開的非零整數,每個數的絕對值不超過1000,保證這些整數各不相同.輸出格式 ...