亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 4817 | 回復(fù): 9
打印 上一主題 下一主題

不太理解 (unsigned char) ~0 >> 1 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-02-10 18:24 |只看該作者 |倒序?yàn)g覽
正如題目說(shuō)((unsigned char) ~0 >> 1 ) ,  第一步:先是把數(shù)字0的各個(gè)二進(jìn)制位全部轉(zhuǎn)換為1, 第二步:然后,將結(jié)果值轉(zhuǎn)換為unsigned char 類(lèi)型 ,第三步:然后右移一位。            
其中不明白的是第一步,~0中0又沒(méi)有存儲(chǔ)空間,怎么把它全部轉(zhuǎn)換為1,轉(zhuǎn)換為多少個(gè)1,全部到底是多少?
請(qǐng)教請(qǐng)教, 麻煩詳細(xì)的講解下~0到底是怎么轉(zhuǎn)換的

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-02-10 18:57 |只看該作者
不會(huì)吧 沒(méi)人甩我,難道是我沒(méi)有表達(dá)清楚?還是一個(gè)無(wú)聊帖?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-02-10 18:59 |只看該作者
你看看對(duì)應(yīng)的匯編代碼

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-02-10 19:39 |只看該作者
那我試試看

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-02-10 19:56 |只看該作者
匯編學(xué)的不好沒(méi)有太看懂, 源碼是:
#include <stdio.h>

int main() {
        int a;
        a = ((unsigned char)~0 >> 1);

        exit(0);
}

匯編是:
.file   "testhuibian.c"
        .text
.globl main
        .type   main,@function
main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $8, %esp
        andl    $-16, %esp
        movl    $0, %eax
        subl    %eax, %esp
        movl    $127, -4(%ebp)
        subl    $12, %esp
        pushl   $0
        call    exit
.Lfe1:
        .size   main,.Lfe1-main
        .ident  "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
高人幫我分析分析

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-02-10 21:28 |只看該作者
0默認(rèn)為int型,占用4個(gè)字節(jié),存儲(chǔ)為0x00000000
~0的存儲(chǔ)值為0xffffffff
轉(zhuǎn)換為unsigned char后存儲(chǔ)為0xff,其值為255
>>1就是除以2,存儲(chǔ)為0111 1111, 所以為255/2 = 127


很長(zhǎng)時(shí)間沒(méi)接觸匯編了,也不知道解釋的對(duì)不對(duì):
注意第(7)句填寫(xiě)了值127
其他的%esp的變化也不是很清楚了,呵呵

.file   "testhuibian.c"
        .text
.globl main
        .type   main,@function
main:
        pushl   %ebp            (1)
        movl    %esp, %ebp    (2) # 這兩行是為了保存main函數(shù)的frame指針到%ebp

        subl    $8, %esp        (3)  # 當(dāng)前frame中留出8個(gè)字節(jié)空間
        andl    $-16, %esp      (4)  # -16的十六進(jìn)制表示為0xfffffff0
                                            這里讓%esp的值以對(duì)齊8位字節(jié)邊界
                                            正常情況下可以假設(shè)%esp的值沒(méi)有變化,
        movl    $0, %eax        (5)
        subl    %eax, %esp     (6)  #  %esp的值沒(méi)有變化
        movl    $127, -4(%ebp) (7)  #  注意這里的尋址方式

        subl    $12, %esp        (8)

        pushl   $0                (9)
        call    exit                (10)  # 這兩句是來(lái)調(diào)用exit(0)的
.Lfe1:
        .size   main,.Lfe1-main
        .ident  "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"

   函數(shù)frame          # 這里假設(shè)棧的增長(zhǎng)是從高地址到低地址的

-------- HighAddr
    %ebp
-------                <---  %ebp,%esp  (1)(2)句執(zhí)行結(jié)果
  4個(gè)字節(jié)  0x000000ff = 127 <--- (7)的執(zhí)行結(jié)果
--------
  4個(gè)字節(jié)   
--------              <---  %esp (3)的執(zhí)行結(jié)果
  4個(gè)字節(jié)  
--------
  4個(gè)字節(jié)   
--------
  4個(gè)字節(jié)   
--------             <---  %esp (8)的執(zhí)行結(jié)果
            LowAddr
==================================================================

有本書(shū)《Professional Assembly Language》可以翻翻,
其中文版叫《匯編語(yǔ)言程序設(shè)計(jì)》

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-02-10 21:32 |只看該作者
原帖由 tianxiaogang12 于 2009-2-10 18:24 發(fā)表
正如題目說(shuō)((unsigned char) ~0 >> 1 ) ,  第一步:先是把數(shù)字0的各個(gè)二進(jìn)制位全部轉(zhuǎn)換為1, 第二步:然后,將結(jié)果值轉(zhuǎn)換為unsigned char 類(lèi)型 ,第三步:然后右移一位。            
其中不明白的是第一步 ...

有存儲(chǔ),在eax里。
不過(guò),我不明白你為什么不問(wèn)(1+2),
1和2都沒(méi)有存儲(chǔ)空間啊,怎么得到3呢。。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-02-10 21:33 |只看該作者
0的類(lèi)型是int,而sizeof(int) >= 2, sizeof(unsigned char) = 1,所以(unsigned char)~0為ff(無(wú)符號(hào)),再右移一位為7f(即127)

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-02-10 21:53 |只看該作者
原帖由 pFreeStyle 于 2009-2-10 21:28 發(fā)表
0默認(rèn)為int型,占用4個(gè)字節(jié),存儲(chǔ)為0x00000000
~0的存儲(chǔ)值為0xffffffff
轉(zhuǎn)換為unsigned char后存儲(chǔ)為0xff,其值為255
>>1就是除以2,存儲(chǔ)為0111 1111, 所以為255/2 = 127


很長(zhǎng)時(shí)間沒(méi)接觸匯編了,也不知 ...

解釋的很準(zhǔn)確,thanks

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-02-10 23:13 |只看該作者
恩 謝謝各位了 長(zhǎng)見(jiàn)識(shí)了
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP