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...