看板Programming
标 题Re: 请问一个位元运算问题
发信站KKCITY (Fri Dec 3 16:16:25 2010)
转信站ptt!news.ntu!ctu-gate!ctu-peer!news.nctu!netnews.chu!News.leobbs.net!z
※ 引述《[email protected] (-858993460)》之铭言:
> 如最早的那篇回文 现代电脑一律是 2 补数 所以是 C
恩 这我了解
A B C 选项是我算的 不是题目 ^^
> negative flag 单纯就是看结果以有号数解释时是不是负数而已
> 和 carry/overflow 无关
> 最後两句话是在说 carry 和 overflow 两个 flag 的:
> carry flag 是无号数相加溢出时设为 1
> 也就是侦测 180+89=269 >= 256 这种情形
> 10110100 => 180
> + 01011001 => 89
> ----------
> 00001101 => 13
> 这种情形发生时 最高位会进位出去
> 所以 carry flag 就在这时设为 1
> 之所以叫 carry flag 是因为它会用在 multi-word 相加时用来记录进位
这应该就像我上篇说的
进位到第九位,但只有8 bits,所以是carry
> overflow flag 则是有号数相加溢出时设为 1
> 也就是侦测 80+70=150 >= 128 或 (-80)+(-70)=-150 < -128 这种情形
> 这两个例子是:
> 01010000 => 80 10110000 => -80
> + 01000110 => 70 + 10111010 => -70
> ---------- ----------
> 10010110 => -106 01101010 => 106
感觉和carry很像,只是差在有无号数 @@
第二个例子看懂(最高位1+1,进到第九位)
第一个例子,用十进位算,确实overflow(>127,2^7-1)
但用二进位算,最高位是0+0,最後是1
没有进到第九位,这样也算overflow吗?
> 由於这种情形发生时 最高位会发生符号改变
还是overflow要看这句话?
最高位改变(以第一个例子看,都是0,变成1;以第二个例子看,都是1,变成0)
> 因此 overflow flag 就会在这个时候设为 1
> 这样应该有回答到你的问题...
抱歉吼,小弟驽钝,对资工来说,这应该很简单...
--
┌─────◆KKCITY◆─────┐ ■ KKBOX 可立刻 听音乐 ■
│ bbs.kkcity.com.tw │ ■■ 想听什麽歌 通通不必等 ■■
└──《From:61.231.64.147
》──┘ ■■■ http://www.kkbox.com.tw ■■■
--