c語言位運(yùn)算的實(shí)例 C語言中的位運(yùn)算符是怎么取反的?
C語言中的位運(yùn)算符是怎么取反的?a為int類型 通常占4個(gè)字節(jié)2的原碼:0000 0000 0000 0000 0000 0000 0000 0010取反: 1111 1111 1111 1111 1
C語言中的位運(yùn)算符是怎么取反的?
a為int類型 通常占4個(gè)字節(jié)
2的原碼:0000 0000 0000 0000 0000 0000 0000 0010
取反: 1111 1111 1111 1111 1111 1111 1111 1101
最高位是1所以是負(fù)數(shù),求其原始數(shù)據(jù),方法是
再次取反加1(符號(hào)位不變)
取反: 1000 0000 0000 0000 0000 0000 0000 0010
加1 1000 0000 0000 0000 0000 0000 0000 0011
所以是 -3
c語言中的位運(yùn)算符中‘按位取反’是怎么運(yùn)算的?
使用~按位取反運(yùn)算的時(shí)候,計(jì)算機(jī)會(huì)將操作數(shù)所對應(yīng)的二進(jìn)制表達(dá)式的每一個(gè)位進(jìn)行取反計(jì)算,取反后所得到的值就是~按位取反的運(yùn)算結(jié)果。例如,假如計(jì)算機(jī)是32位的,接下來要計(jì)算~5的值,計(jì)算過程如下:5的二進(jìn)制表達(dá)式為:00000000000000000000000000000101執(zhí)行~運(yùn)算,即~5后:11111111111111111111111111111010,即結(jié)果為-6以上過程沒有任何問題,但如果忘記了負(fù)數(shù)的二進(jìn)制表達(dá)方式,那么就會(huì)對這個(gè)結(jié)果產(chǎn)生疑問,為什么11111111111111111111111111111010表示-6,可能會(huì)以為它應(yīng)該表示-10等等,所以,使用~按位取反的另一個(gè)關(guān)鍵就是理解11111111111111111111111111111010為什么表示-6,也即理解負(fù)數(shù)的二進(jìn)制表達(dá)方式。擴(kuò)展資料js取整~是按位取反運(yùn)算,~~是取反兩次在這里~~的作用是去掉小數(shù)部分因?yàn)槲贿\(yùn)算的操作值要求是整數(shù),其結(jié)果也是整數(shù),所以經(jīng)過位運(yùn)算的都會(huì)自動(dòng)變成整數(shù)除了~~n還可以用n<<0n>>0n|0