kalinka520 wrote:請問各位大大,有人會...(恕刪) A=0x93實際上A轉成十進制應該是147至於那個-109應該是byte的表示方式127~-128 (轉2進制高位前面為1等於負值)不理會其他的,把他當16進制或是10進制看待0x93 - 0x55 = 0x3E0x3E(16進制) = 62(10進制)
kalinka520 wrote:A為何是-109是我不懂的地方 A是0x93,如果用10進制表示是147,但是147已經超出它定義的-128~127,所以0x93應該是負值,把147-256=-109 (1個byte=256)
位元裡面, 第一個位元 代表 正負號使用0x 93 = 10010011由於第一位元為 (1) , 因此代表為負數要計算數字是 負多少時 ,就要用二補數的方式 ,也就是 , 整個資料完全相反之後 ,再+110010011 -> 01101100 , 再加 1 -> 01101101十進制來看 , 就是 109 , 所以 數字就是 - 109---------------------------------另外一種 , 就是樓上的說法 ,不看正負號時 , 數字超過 127 , 所以 要 - 256-----------------------------------從程式設計的角度來看一個整數 , 可以定義為 undesigned , 也就是第一個位元不當正負號 ,直接當作數字 , 所以數字的範圍就是 0~255如果第一位元當作正負號 ,那就是 -128~ +127以上是 8位元的部份, 16位元以此類推-32768 ~ +32767或 0~ 65535所以一些遊戲早期會有一些 Bug , 或者是數字上限,都是這個因素像是瑪莉兄弟 生命值超過 127 , 生命就會變成負數程式沒寫好, 造成溢位 , 正數變成負數32位元的上限是 2147483647所以有些遊戲,金幣的上限就會是這個數字,舉例魔獸世界早期的金幣上限就是 214748金 36銀 47銅
好久沒複習了,小弟練習一下以下問題皆用二進位計算A = 0x93 = 10010011bB = 0x55 = 01010101b1.) C = A + B10010011b+ 01010101b-----------------11101000b (0xE8) Bit7為正負號表示位元,所以需要做2's 計算( 反向後在加1)所以 11101000b 反向後為 00010111b,再加上1為 00011000b = (-)16+8 = -242.) C = A - B以計算機減法運算為 A + (-)B,代表B要做2's 處理10010011b+ 10101011b-----------------1 00111110b (溢位忽略不計)所以答案為 32+16+8+4+2 = 62