[R語言]位元運算操作常用函數




做作業的時候蒐集和自己寫的...等有時間把功能完善再來丟個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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料