NOT運算子問題 |
尚未結案
|
syao
初階會員 發表:66 回覆:63 積分:25 註冊:2005-02-02 發送簡訊給我 |
#include輸出結果 p=3 x=01100100 y=00110010 -------------------- not x ==> 65435 x and y ==> 32 x or y ==> 118 x xor y ==> 86 x >> p ==> 12 x << p ==> 800 請按任意鍵繼續 . . . printf("not x ==> %d\n",~x);//為什麼這樣會不行還要先指定給xx=~x,但其他的& >> << | ^都不需要這樣做法?? printf("not x ==> %d\n",~x); //為什麼顯示-101? x=100 轉成二進位 01100100 再做NOT 10011011這樣應該是 155 為什麼是-101?? -101是100的二補數嗎?? not x ==>65435 轉成二進位是1111111110011011 最高位bit為1時不是代表負數嗎???編譯數是如何判斷是正數? unsiged short int是16 bit最高位bit都是1搞不懂是如何判斷為正數 謝謝 發表人 - syao 於 2005/08/07 03:10:56 |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
syao 您好: 一個整數變數是不是有正有負,是依unsigned來決定!
一般說來,最左方的位元是符號位元,用來代表正負數。是0的話表示是正數;反之為負。
但是如果整數型態變數宣告為unsigned,那就是無正負號數,通通是正的,純粹拿來計數。
printf(.)可以參考一下BCB的線上說明:printf Conversion-Type Characters。
還有如果您要做的是純粹的位元運算,建議變數要用unsigned宣告!
否則會出現不想要的結果,之前我也吃過這個虧!
printf("sizeof(short int)=%d\n", sizeof(short int) ); printf("sizeof(1)=%d\n", sizeof(1) ); // an integer of value 1 without type assigned printf("not x ==> %d\n", ~x); // as an integer printf("not x ==> %u\n", ~x); // as an unsigned integer printf("not x ==> %d\n", xx); // as an unsigned short integerRichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |