問題描述:
為什麼負數除二和右移一位的結果不一樣?
這是在vs2013,c#中
這是在cb中
也有一些編譯器,結果是一樣的,但是為什麼結果會是這樣呢?
究其原因,還得看看彙編**,在vs2013中提供了反彙編指令,結果如下
可以看到。
第一句:f = x / 2
00df39f7 mov eax,dword ptr [ebp-58h] ;將x的值移到暫存器eax
00df39fa mov ecx,2 ;將值2移到ecx
00df39ff cdq ;將eax高位擴充套件到edx
00df3a00 idiv eax,ecx ;做除法運算
00df3a02 mov dword ptr [ebp-50h],eax ;移動到記憶體
(關於idiv指令詳見二進位制除法)
第二句:g = x >> 1
僅僅是做乙個右移運算,所以如果最低位是1的話,就會被抹去。
總結:除法運算,結果都向0取整;位運算結果向下取整
為什麼要禁止除GET和POST之外的HTTP方法?
最近老是聽朋友說,被上級單位通報http不安全方法漏洞,本來是低危漏洞,也沒怎麼注意它,最近公升為中危漏洞,每天催著去整改,鬧得人心惶惶,甚至經常被維護人員吐槽,做的是得不償失的事情。因此,有必要說明一下,為什麼要禁止除get和post之外的http方法。換句話說,對於這些http不安全方法,到底有...
執行緒和程序小知識(二)
執行緒是程序內的執行單元 thread1.stop 不推薦使用,它會釋放所有的monitor 太暴力,一致性很難得到保證。thread1.interrupt void 中斷執行緒 thread1.isinterrupted boolean 判斷是否被中斷 thread1.interrupted st...
什麼是大端序和小端序,為什麼要有位元組序
位元組序,又稱端序或尾序 英語中用單詞 endianness表示 在計算機領域中,指電腦記憶體中或在數字通訊鏈路中,占用多個位元組的資料的位元組排列順序。在幾乎所有的平台上,多位元組物件都被儲存為連續的位元組序列。例如在 go 語言中,乙個型別為int的變數x位址為0x100,那麼其指標 x的值為0...