做作業的時候蒐集和自己寫的...等有時間把功能完善再來丟個github吧
包含了:
1.右位移(通過自訂插入的數字可以實現邏輯位移和算數位移)
2.加法
3.減法(2補數表示法)
4.十進制跟二進制的轉煥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#右移 rShifting=function(targetNum,insertNum,bits){ tmp=targetNum for(i in 1:bits){ if(i<23){ targetNum[i+1]=tmp[i] } else{ targetNum[1]=insertNum } } return(targetNum) } #plus function plusBin<-function(a,b,len){ a=as.numeric(bitsToInt(a)) b=as.numeric(bitsToInt(b)) #轉2進制 ans=number2binary((a+b),len+1) return(ans) } #位元減法 minusBin<-function(bigone,smallone,len){ #轉10進制 bigone=as.numeric(bitsToInt(bigone)) #轉10進制 smallone=as.numeric(bitsToInt(smallone)) #轉2進制 ans=number2binary((bigone-smallone),len) return(ans) } #十進制轉二進制 number2binary = function(number, noBits) { binary_vector = rev(as.numeric(intToBits(number))) if(missing(noBits)) { return(binary_vector) } else { binary_vector[-(1:(length(binary_vector) - noBits))] } } #位元轉整數 #需要陣列型態如:a=c(0,0,1) bitsToInt<-function(x) { packBits(rev(c(rep(FALSE, 32-length(x)%%32), as.logical(x))), "integer") } |
恩...加減法很混,能用就好XD