         return Int64(bitPattern:self) //No difference if the platform is 32 or 64
         }
     public static var allOnes:UInt64{return UInt64.max}
+    public static var size:Int{return strideof(self)}
+    subscript(index: Int) -> UInt64 {
+        get {
+            return self & (0xFF << index.toU64) >> index.toU64
+        }
+        set(newValue) {
+            self = self | (newValue.toU64 << index.toU64)
+        }
+    }
 }
 
 // MARK: Operators

        return Int64(self) //No difference if the platform is 32 or 64
        }
    public static var allOnes:Int8{return Int8(bitPattern: UInt8.max)}
}
extension UInt8 {
    public var toU8: UInt8{return self}

        return Int64(self) //No difference if the platform is 32 or 64
        }
    public static var allOnes:Int{return Int(bitPattern: UInt.max)}
    public static var size:Int{return strideof(self)}
    subscript(index: Int) -> Int {
        get {
            if(Int.size == 8){
                return Int(bitPattern: UInt((self.toU64 & (0xFF << index.toU64)) >> index.toU64) )
            }else{
               return Int(bitPattern: UInt((self.toU32 & (0xFF << index.toU32)) >> index.toU32) )
            }
        }
        set(newValue) {
            if(Int.size == 8){
                self = Int(bitPattern: UInt(self.toU64 | (newValue.toU64 << index.toU64)) )
            }else{
                self = Int(bitPattern: UInt(self.toU32 | (newValue.toU32 << index.toU32)) )
            }
        }
    }
}
extension UInt{
    public var toU8: UInt8{return UInt8(truncatingBitPattern:self)}
