1樓:匿名使用者
char型別bai
可看做是占用1位元組空間的有符du號zhi數
191>127,而8位有
符號整數範圍是-128~127,所以dao191的二進位制10111111存放在計算機內中最高位為1,會
容認為是負數(有符號整數的情況下)
而計算機中的負數都是以補碼形式存放的,它識別這是乙個負數,就知道這是乙個補碼
而-65的補碼為10111111(負數的補碼求法,最高位為1,然後將原數的絕對值 的二進位制每一位取反再+1)
即65=00100001b,除最高位外取反01011110b,結果+1:01011111,
新增符號位,最高位置為1: 11011111
2樓:匿名使用者
191的二進位制10111111。把191賦給ch,ch存入191的二進位製碼。
以整形輸出時,系統取出二進位製碼,內由於char的型別的值是有符號的,容最高位是符號位。
所以輸出時,把ch記憶體中的二進位製碼轉換為原始碼 :11000001 最高位是1,表示負數,然後後面的七個二進位制表示數值,64+1 = 65 。輸出-65
樓主注意了:記憶體中的是補碼,補碼轉換為原始碼,先把補碼減一,然後除了最高位以外,進行取反得到原始碼。目測樓主將補碼加一再取反了。
3樓:匿名使用者
為什麼會
來列印出-65,以自我的理解(我的理解是錯誤的)列印出的結果應該是-62. 因為10111111轉化為十進位制是-62. 謝謝!我的理解錯在**了?
記憶體裡存的都是補碼(低俗點說人類用的數是數,計算機用的數叫補碼.).正數的補碼是它本身,負數的補碼是取反加1.
記憶體裡10111111可以表示-65跟191. 編譯器怎麼知道是-65還是191. 比如printf("%d")就是告訴編譯器把它當作-65列印,printf("%u")就是把它當作191理解.
不信你試試.
真心不知道你這-62怎麼來的.(猜猜估計是想把補碼轉換回去沒轉對吧)
再羅索一遍,這是重點你想計算的話記住人類用的數轉換成計算機用的數(補碼)的規則: 正數不變,負數取反加一.
不想計算也可以口算 char 型別可以表示範圍256. 超過256一半的數n 可以表示成n也可以表示成
-(256-n),沒超過一半的只能是n啦~~
4樓:自我西郊
10111111是char,輸出後做符bai號擴充套件,32位機du是zhi11111111111111111111111110111111,然後因為dao
最高位為1,其為補
碼,全部專
取反,得到反碼屬,再加一得到真值65,因為補碼表示,所以-65
5樓:匿名使用者
定義成unsigned char ch=191;就可以了。char範圍(-127~+128)
十進位制轉二進位制原理,十進位制轉二進位制的這方法的數學原理是什麼啊?求大神詳解!
用2輾轉相除至結果為1 將餘數和最後的1從下向上倒序寫 就是結果 例如302 302 2 151 餘0 151 2 75 餘1 75 2 37 餘1 37 2 18 餘1 18 2 9 餘0 9 2 4 餘1 4 2 2 餘0 2 2 1 餘0 故二進位制為100101110 二進位制轉十進位制 從...
十六進製制和二進位制的對應關係表二進位制十進位制八進位制十六進製制的對應表
二進位制和十六進製制的對應關係如下圖所示 十六進製制對應的二進位制數要比十進位制數本身好記。你看,0 9十個符號和它們代表的數值當初是費了功夫才記住的,只是我們現在熟悉了而已 而二進位制數字只需記住0 1兩個符號而且它們就代表0和1。十六進製制數字用4位二進位制表示,二進位制數從右至左的位權是1 2...
二進位制小數怎麼轉換為十進位制,二進位制數如何轉換成十進位制數?
和整數一樣,從小數點後第一位開始算,第一位是1 2,第二位是1 4,然後是1 8,然後是1 16,以此類推,比如 二進位制1.011 1 0 1 2 1 1 4 1 1 8 1 0.25 0.125 十進位制1.375 用權啊 比如10.101的二進位制.對應十進位制為 1 2 1 0 2 0 1 ...