lua程式設計(第四版)練習答案自做(第十三章)

2021-10-19 08:42:01 字數 2565 閱讀 3656

13.1

13.2

13.3

13.4

13.5

13.6

13.7

倉庫page136

string.format("%x",0xff & 0xabcd)
上例中f即二進位制1111,0xff前面的所有位為0,後面八位為1。& 運算中, &1即不變, &0即為0,故0xabcd只有後面的cd不變,前面的位都變為0.

string.format("%x",0xff | 0xabcd)
同上,但是 | 運算中, |1即為1, |0即不變,故 0xabcd中,ab所在的位不變,而cd所在的位因為都變成了1,按照16進製制計數法即ff。

string.format("%x",0xaaaa ~ -1)
按補碼記法, -1的所有二進位制位都是1 ,16進製制中a轉換為二進位制1010。在 ~ 異或運算中, ~1即切換,意思是0變成1,1變成0,故1010變為0101,即5。而前面的所有二進位制位都變成1。

string.format("%x",~0)
按補碼記法,0的所有二進位制位都是0,故取反後所有位都是1。在標準lua中整型是64位,轉換成16進製制即16位f。

page138

加法、減法、乘法操作對於有符號整型和無符號整型是一樣的

關係運算對於有符號整型和無符號整型是一樣的

page141

x=string.pack("i7",1<<55)
這裡會報錯的原因是,我們明確要打包的是7位元組的整型數,而1<<55即2

552^

255溢位了。

#!/usr/bin/lua

function

umod

(n,m)

while

not math.

ult(n,m)

do n=n-m

print

(string.

format

("n=%u"

,n))

endreturn n

end

不清楚這裡的位數是指有多少位數,還是指整型數占多少個二進位制位。所以待完善。

#!/usr/bin/lua

function

powtwo

(num)

if num&

(num-1)

==0then

return

true

else

return

false

endend

#!/usr/bin/lua

function

hamming

(num)

local count=

0while num~=0do

if num&1==

1then

count=count+

1end

num=num>>

1end

return count

end

#!/usr/bin/lua

function

isrev

(num)

s=""

while num~=0do

s=num&1==

1and s..

"1"or s..

"0" num=num>>

1end

if s==string.

reverse

(s)then

return

true

else

return

false

endend

#!/usr/bin/lua

function

newbitarray

(n)local a=

return a

endfunction

setbit

(a,n,v)

a[n]

=vend

function

testbit

(a,n)

return a[n]

end

不知道題目的意思是不是要求用位操作來完成,有時間再來補充。

#!/usr/bin/lua

local sum=

0local f=

assert

(io.

open

(arg[1]

,"rb"))

local blocksize=

11for bytes in f:

lines

(blocksize)

do _,_,t=string.

unpack

("ibf"

,bytes)

sum=sum+t

endreturn sum

lua程式設計(第四版)練習答案自做(第十八章)

倉庫數值型for應該指的是for i n,m,1的形式,也就是i從n開始按步長1逐漸遞增,直到大於m結束迴圈 function fromto n,m n n 1return function n n 1if n m then return n endendend無狀態迭代器 usr bin lua ...

演算法第四版 練習答案 1 4 1

證明從n個數中,取出3個整數的不同組合的總數為n n 1 n 2 6 提示 使用數學歸納法 最簡單和常見的數學歸納法是證明當n等於任意乙個自然數時某命題成立。證明分下面兩步 證明當n 1時命題成立。假設n m時命題成立,那麼可以推導出在n m 1時命題也成立。m代表任意自然數 這種方法的原理在於 首...

演算法 第四版 練習1 4 2

修改threesum,正確處理兩個較大的int值相加可能溢位的情況 首先jdk中定義int佔4個位元組,32位 後面全部的計算都是以此為根據的 32位就是jvm僅僅給分配32個格仔的空間,用以存放資料。總所周知計算機中用0和1存放資料。那麼,32個格仔中放滿0或1的方法 有2的32次方種 或者說32...