SWIFT - 25. Битовые операции

preview_player
Показать описание
Рекомендации по теме
Комментарии
Автор

Алексей, спасибо Вам за интересный курс! 

С удовольствием жду выхода новых уроков.

Alexey_Prokhorov
Автор

Очень интересный урок, Спасибо болшое !

vitalikfrolov
Автор

спасибо! кроме avr ассемблера ничем не занимался и этот урок прямо таки час релакса =))

Илья-гпз
Автор

вопрос в том насколько часто это применяется в IOS разработке и где ?

danylopolishchuk
Автор

Не претендую. на красоту кода. Набросал свой вариант для ориентира.
//2
print("\t#2")
var number: UInt8 =
for _ in 0...3 {
for _ in 1...7 {
print(number.binary())
number = number << 1
}
for _ in 1...7 {
print(number.binary())
number = number >> 1
}
}
//1
print("\t#1")
extension Checklist: CaseIterable {
static func check(list: UInt8) {
var flag = true
print("List of purcases:")
for i in Checklist.allCases {
if list & i.rawValue > 0 {print(i)
flag = false
}
}
if flag { print("Empty")}
}
static func setTo(_ list: inout UInt8, position: Checklist) {
list = list | position.rawValue
}
}

var list: UInt8 = 0b00001101
Checklist.check(list: list)
Checklist.setTo(&list, position: .Chicken)
Checklist.check(list: list)
Checklist.setTo(&list, position: .Chicken)

//3 Chess
print("/t#3")


// extension to add .binary() to Int64
extension Int64 {
func binary() -> String {
var result = ""
for i in 0..<64 {
let mask = 1 << i
let set = Int(self) & mask != 0
result = (set ? "1" : "0") + result
}
return result
}
}
enum Column: Int, CaseIterable {
case A = 1
case B = 2
case C = 3
case D = 4
case E = 5
case F = 6
case G = 7
case H = 8
}
// Let’s make a chessboard
var chessBoard: Int64 = 0
for column in 1...8 {
for row in 1...8 {

if (row+column) % 2 == 0 {
let mask: Int64 = 1 << ((column - 1)*8 + row - 1)
chessBoard = chessBoard | mask
}
}
}

func check (column: Column, row: Int) {
let mask: Int64 = 1 << ((column.rawValue-1)*8 + row - 1)
let test = chessBoard & mask
print ("\(column)\(row)-\(test != 0 ? "Black" : "White")")
}

DmitryLorents
Автор

Задание 1
func breadBuy(number: UInt8) {
let bread = number & CheckList.Bread.rawValue
if bread == 1 {
print("Bread buy!")
} else {
print("Bread don't buy")
}
}

func chickenNuy(number: UInt8) {
let chicken = number & CheckList.Chicken.rawValue
if chicken == 2 {
print("Chicken buy!")
} else {
print("Chicken don't buy")
}
}

func applesBuy(number: UInt8) {
let appels = number & CheckList.Apples.rawValue
if appels == 4 {
print("Appels buy!")
} else {
print("Appels don't buy")
}
}

func pearsBuy(number: UInt8) {
let pears = number & CheckList.Pears.rawValue
if pears == 8 {
print("Pears buy!")
} else {
print("Pears don't buy")
}
}
Задание №2
for i in 0...14 {
var a: UInt8 =
for _ in 0...1 {
for _ in 1...7 {
a.binary()
a = a << 1
}
for _ in 1...7 {
a.binary()
a = a >> 1
}
}

}

glukhov