{"version":3,"sources":["webpack:///./src/assets/images/and_bitwise.png","webpack:///./src/assets/images/bitflags.png","webpack:///./src/assets/images/bit_byte.png","webpack:///./src/assets/images/and_not_bitwise.png","webpack:///./src/assets/images/200_and_100.png","webpack:///./src/assets/images/iota_value.png","webpack:///./src/assets/images/or_bitwise.png","webpack:///./src/assets/images/not_bitwise.png","webpack:///./src/views/Chap27EnumIotaAndBitmask.vue?3186","webpack:///src/views/Chap27EnumIotaAndBitmask.vue","webpack:///./src/views/Chap27EnumIotaAndBitmask.vue?4413","webpack:///./src/views/Chap27EnumIotaAndBitmask.vue","webpack:///./src/assets/images/left_shift.png"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","directives","name","rawName","pre","staticStyle","staticRenderFns","components","FeedbackInvite","BuyCopyInvite","NewsletterInput","ChapterHeading","ChapterBibliography","TOCChapter","NavBar","BIconLink45deg","Footer","mounted","i","mathElements","length","tagName","window","displayMode","throwOnError","macros","fleqn","created","data","publicPath","metaInfo","title","htmlAttrs","lang","meta","charset","content","property","link","rel","href","component"],"mappings":"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","file":"js/chunk-57b827ec.571f5022.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/and_bitwise.d1a289a3.png\";","module.exports = __webpack_public_path__ + \"img/bitflags.625465cb.png\";","module.exports = __webpack_public_path__ + \"img/bit_byte.1efcb1ea.png\";","module.exports = __webpack_public_path__ + \"img/and_not_bitwise.e0ef9e8e.png\";","module.exports = __webpack_public_path__ + \"img/200_and_100.bb81eecc.png\";","module.exports = __webpack_public_path__ + \"img/iota_value.4e87f556.png\";","module.exports = __webpack_public_path__ + \"img/or_bitwise.4339dd4f.png\";","module.exports = __webpack_public_path__ + \"img/not_bitwise.4a1d96b7.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('NavBar'),_c('div',{staticClass:\"container-fluid\"},[_c('b-row',[_c('TOCChapter',{attrs:{\"chapter-id\":\"Chap27EnumIotaAndBitmask\"}}),_c('b-col'),_c('b-col',{attrs:{\"role\":\"main\",\"md\":\"6\"}},[_c('ChapterHeading',{attrs:{\"chapter-title\":\"Chapter 27: Enum, Iota & Bitmask\",\"image-name\":\"enum-iota.jpg\",\"image-alt\":\"Enum, Iota & Bitmask\"}}),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"what-will-you-learn-in-this-chapter\"}}),_c('h1',{attrs:{\"data-number\":\"1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"1\")]),_vm._v(\" What will you learn in this chapter? \"),_c('a',{attrs:{\"href\":\"#what-will-you-learn-in-this-chapter\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"What is an enum?\")])]),_c('li',[_c('p',[_vm._v(\"How to create an enum with Go.\")])]),_c('li',[_c('p',[_vm._v(\"What is iota, and how to use it?\")])]),_c('li',[_c('p',[_vm._v(\"What are bitwise operators, and how to use them?\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"technical-concepts-covered\"}}),_c('h1',{attrs:{\"data-number\":\"2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"2\")]),_vm._v(\" Technical concepts covered \"),_c('a',{attrs:{\"href\":\"#technical-concepts-covered\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Enum\")])]),_c('li',[_c('p',[_vm._v(\"Enumeration type\")])]),_c('li',[_c('p',[_vm._v(\"iota\")])]),_c('li',[_c('p',[_vm._v(\"index\")])]),_c('li',[_c('p',[_vm._v(\"Byte, bits\")])]),_c('li',[_c('p',[_vm._v(\"Binary\")])]),_c('li',[_c('p',[_vm._v(\"Bitmask, Bitflag\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"enum-definition\"}}),_c('h1',{attrs:{\"data-number\":\"3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"3\")]),_vm._v(\" Enum definition \"),_c('a',{attrs:{\"href\":\"#enum-definition\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"An “enum” (or enumeration data type) is a \"),_c('strong',[_vm._v(\"data type\")]),_vm._v(\" that consists of a set of “values that are explicitly defined by the programmer”\"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"institute1990ieee\",\"href\":\"#institute1990ieee\"}},[_vm._v(\"[@institute1990ieee]\")])],1),_c('p',[_vm._v(\"For example, days of the week are an enum. There are seven days of the week and not more.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"go-and-enums\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"4\")]),_vm._v(\" Go and enums \"),_c('a',{attrs:{\"href\":\"#go-and-enums\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The language (at least in its version 1) does not have specific enumeration types. However, we can still build a type that offers the same features as enums.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"building-a-type-that-can-be-used-as-enum.\"}}),_c('h1',{attrs:{\"data-number\":\"5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"5\")]),_vm._v(\" Building a type that can be used “as” enum. \"),_c('a',{attrs:{\"href\":\"#building-a-type-that-can-be-used-as-enum.\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Let’s take the example of HTTP methods.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/type-as-enum/main.go \\n\\ntype HTTPMethod int\\n\\nconst (\\n GET HTTPMethod = 0\\n POST HTTPMethod = 1\\n PUT HTTPMethod = 2\\n DELETE HTTPMethod = 3\\n PATCH HTTPMethod = 4\\n HEAD HTTPMethod = 5\\n OPTIONS HTTPMethod = 6\\n TRACE HTTPMethod = 7\\n CONNECT HTTPMethod = 8\\n)\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"First, we declare a new type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" (its underlying type is \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])]),_vm._v(\").\")])]),_c('li',[_c('p',[_vm._v(\"Then we create nine constants of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])])])]),_c('li',[_c('p',[_vm._v(\"Each constant is of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" and is named like the HTTP method its designates.\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"why-integers\"}}),_c('h3',{attrs:{\"data-number\":\"5.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"5.0.1\")]),_vm._v(\" Why integers? \"),_c('a',{attrs:{\"href\":\"#why-integers\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"You are free to use an underlying type different from \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])]),_vm._v(\".\")]),_c('p',[_vm._v(\"However, this is a common practice to use integers.\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"It’s generally more efficient to compare an integer with another integer instead of comparing a string with another string\")])]),_c('li',[_c('p',[_vm._v(\"You can use iota. (see next sections)\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"usage-example\"}}),_c('h3',{attrs:{\"data-number\":\"5.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"5.0.2\")]),_vm._v(\" Usage Example \"),_c('a',{attrs:{\"href\":\"#usage-example\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Imagine that you have a function that handles HTTP requests.\")]),_c('p',[_vm._v(\"In this function, you expect the user to give you an HTTP method, and you expect to handle a predefined set of methods. Your function can have a parameter of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" (instead of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])]),_vm._v(\") :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func handle(method HTTPMethod, headers map[string]string, uri string) {}\")])]),_c('p',[_vm._v(\"Inside the function body, you can adapt the behavior of your handler by using the enum values :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func handle(method HTTPMethod, headers map[string]string, uri string) {\\n if method == GET {\\n fmt.Println(\\\"the method is get\\\")\\n } else {\\n fmt.Println(\\\"the method is not get\\\")\\n }\\n}\")])]),_c('p',[_vm._v(\"Enums types can also be used in structs (like any other types) :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/type-as-enum/main.go \\n\\ntype HTTPRequest struct {\\n method HTTPMethod\\n headers map[string]string\\n uri string\\n}\\nfunc main() {\\n r := HTTPRequest{method: GET, headers: map[string]string{\\\"Accept\\\": \\\"application/json\\\"}, uri: \\\"/prices\\\"}\\n fmt.Println(r)\\n}\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"a-perfectible-solution\"}}),_c('h1',{attrs:{\"data-number\":\"6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6\")]),_vm._v(\" A perfectible solution \"),_c('a',{attrs:{\"href\":\"#a-perfectible-solution\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The solution proposed in the previous section is not perfect. Here is why :\")]),_c('ul',[_c('li',[_c('strong',[_vm._v(\"Any\")]),_vm._v(\" \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])]),_vm._v(\" can be a variable of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"lolMethod := HTTPMethod(42)\\nheaders := make(map[string]string)\\nhandle(lolMethod,headers,\\\"/prices\\\" )\")])]),_c('p',[_vm._v(\"We created a variable \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"lolMethod\")])]),_vm._v(\" which is of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" and the code will compile.\")]),_c('ul',[_c('li',[_vm._v(\"When we print an \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" the output is an \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])]),_vm._v(\" :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.Println(GET)\\n// > 0\")])]),_c('ul',[_c('li',[_vm._v(\"When marshaled to JSON, a value of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" will be printed as an int ...\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type HTTPRequest struct {\\n Method HTTPMethod `json:\\\"method\\\"`\\n Headers map[string]string `json:\\\"headers\\\"`\\n Uri string `json:\\\"uri\\\"`\\n}\\nr := HTTPRequest{Method: GET, Headers: map[string]string{\\\"Accept\\\": \\\"application/json\\\"}, Uri: \\\"/prices\\\"}\\nmarshaled, err := json.Marshal(r)\\nif err != nil {\\n panic(err)\\n}\")])]),_c('p',[_vm._v(\"Will produce the following JSON string:\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"{\\n \\\"method\\\": 0,\\n \\\"headers\\\": {\\n \\\"Accept\\\": \\\"application/json\\\"\\n },\\n \\\"uri\\\": \\\"/prices\\\"\\n}\")])]),_c('p',[_vm._v(\"The value \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0\")])]),_vm._v(\" might be interpreted as an error. Instead, we want to output \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\\\"GET\\\"\")])]),_vm._v(\" .\")]),_c('ul',[_c('li',[_vm._v(\"When we want to unmarshal a JSON string, we might encounter an error :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"jsonB := []byte(\\\"{\\\\\\\"method\\\\\\\":\\\\\\\"GET\\\\\\\",\\\\\\\"headers\\\\\\\":{\\\\\\\"Accept\\\\\\\":\\\\\\\"application/json\\\\\\\"},\\\\\\\"uri\\\\\\\":\\\\\\\"/prices\\\\\\\"}\\\")\\nreq := HTTPRequest{}\\nerr = json.Unmarshal(jsonB,&req)\\nif err != nil {\\n panic(err)\\n}\")])]),_c('p',[_vm._v(\"We got a panic :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"panic: json: cannot unmarshal string into Go struct field HTTPRequest.method of type main.HTTPMethod\")])]),_c('p',[_vm._v(\"This is perfectly normal, we have a string as input, and we want to convert it to an int. One solution could be to change the underlying type to string.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"enum-libraries\"}}),_c('h1',{attrs:{\"data-number\":\"7\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7\")]),_vm._v(\" Enum libraries \"),_c('a',{attrs:{\"href\":\"#enum-libraries\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To solve the previous issues :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We need to be able to \"),_c('strong',[_vm._v(\"check\")]),_vm._v(\" if a value is part of the enum\")]),_c('ul',[_c('li',[_vm._v(\"We need a method that validates a value\")])])]),_c('li',[_c('p',[_vm._v(\"We need to be able to \"),_c('strong',[_vm._v(\"print\")]),_vm._v(\" an element correctly\")]),_c('ul',[_c('li',[_vm._v(\"We need to implement the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"fmt.Stringer\")])]),_vm._v(\" interface\")])])]),_c('li',[_c('p',[_vm._v(\"We need to be able to \"),_c('strong',[_vm._v(\"marshal\")]),_vm._v(\" correctly an enum value into JSON (an maybe into another format)\")]),_c('ul',[_c('li',[_vm._v(\"We need to implement the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"json.Marshaler\")])]),_vm._v(\" interface\")])])]),_c('li',[_c('p',[_vm._v(\"We need to be able to \"),_c('strong',[_vm._v(\"unmarshal\")]),_vm._v(\" correctly an enum value from JSON (an maybe from another format)\")]),_c('ul',[_c('li',[_vm._v(\"We need to implement the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"json.Unmarshaler\")])]),_vm._v(\" interface\")])])])]),_c('p',[_vm._v(\"We can implement those interfaces :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/enum-implementations/main.go \\n\\ntype HTTPMethod int\\n\\nfunc (h HTTPMethod) IsValid() bool {\\n panic(\\\"implement me\\\")\\n}\\n\\nfunc (h HTTPMethod) String() string {\\n panic(\\\"implement me\\\")\\n}\\n\\nfunc (h HTTPMethod) UnmarshalJSON(bytes []byte) error {\\n panic(\\\"implement me\\\")\\n}\\n\\nfunc (h HTTPMethod) MarshalJSON() ([]byte, error) {\\n panic(\\\"implement me\\\")\\n}\")])]),_c('p',[_vm._v(\"However, this is tedious. We can use a library to do that for us. After a quick search on GitHub, it seems that two libraries emerge :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"https://github.com/alvaroloes/enumer\")])]),_c('li',[_c('p',[_vm._v(\"https://github.com/abice/go-enum\")])])]),_c('p',[_vm._v(\"They will generate those methods for you. They offer a command-line interface.\")]),_c('p',[_vm._v(\"Note that the support for enums is a feature request for version 2 of the language.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"iota\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"8\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8\")]),_vm._v(\" Iota \"),_c('a',{attrs:{\"href\":\"#iota\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"In the previous section:\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We needed to assign an integer to each constant.\")])]),_c('li',[_c('p',[_vm._v(\"The type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod\")])]),_vm._v(\" is also written on each line.\")])])]),_c('p',[_vm._v(\"To avoid those two tasks, we can modify our enum to use \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"iota\")])]),_vm._v(\" :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/iota/main.go\\npackage main\\n\\nimport \\\"fmt\\\"\\n\\ntype HTTPMethod int\\n\\nconst (\\n GET HTTPMethod = iota\\n POST HTTPMethod = iota\\n PUT HTTPMethod = iota\\n DELETE HTTPMethod = iota\\n PATCH HTTPMethod = iota\\n HEAD HTTPMethod = iota\\n OPTIONS HTTPMethod = iota\\n TRACE HTTPMethod = iota\\n CONNECT HTTPMethod = iota\\n)\\n\\nfunc main() {\\n fmt.Println(PUT)\\n // 2\\n}\")])]),_c('p',[_vm._v(\"We can simplify this code. It’s possible to avoid repeating \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"HTTPMethod = iota\")])]),_vm._v(\" each time by using the implicit repetition property. This property is very handy; it says that inside a constant set (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"const(...)\")])]),_vm._v(\") you can assign a value just to the \"),_c('strong',[_vm._v(\"first\")]),_vm._v(\" const:\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/iota-improvement/main.go \\n\\nconst (\\n GET HTTPMethod = iota\\n POST\\n PUT\\n DELETE\\n PATCH\\n HEAD\\n OPTIONS\\n TRACE\\n CONNECT\\n)\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"how-does-iota-work\"}}),_c('h3',{attrs:{\"data-number\":\"8.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8.0.1\")]),_vm._v(\" How does iota work \"),_c('a',{attrs:{\"href\":\"#how-does-iota-work\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"“iota represents successive untyped integer constants”\"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"go-specs\",\"href\":\"#go-specs\"}},[_vm._v(\"[@go-specs]\")])],1)]),_c('li',[_c('p',[_vm._v(\"It means that iota is always an integer; it’s impossible to use iota to construct floats values (for instance).\")])]),_c('li',[_c('p',[_vm._v(\"“Its value is the index of the respective ConstSpec in that constant declaration”\"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"go-specs\",\"href\":\"#go-specs\"}},[_vm._v(\"[@go-specs]\")])],1)])]),_c('p',[_vm._v(\"The value of iota is determined by the index of the constant in the constant declaration. In the previous example, POST is the second constant then it has a value of 1. Why 1? Why not 2? That’s because of the third property of iota :\")]),_c('ul',[_c('li',[_vm._v(\"it starts at zero \"),_c('b-link',{staticClass:\"citation\",attrs:{\"data-cites\":\"go-specs\",\"href\":\"#go-specs\"}},[_vm._v(\"[@go-specs]\")])],1)]),_c('p',[_vm._v(\"The initial value of iota is zero. Example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type TestEnum int\\n\\nconst (\\n First TestEnum = iota\\n Second\\n)\\n\\nfmt.Println(First)\\n// 0\")])]),_c('p',[_vm._v(\"iota is initialized with zero. If you want that your first enum element starts with something other than zero, you can assign a different value to the initial constant :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type TestEnum int\\n\\nconst (\\n First TestEnum = iota +4\\n Second\\n)\\n\\nfmt.Println(First)\\n// 4 (0+4)\")])]),_c('p',[_vm._v(\"You can also multiply iota by an integer :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type TestEnum int\\n\\nconst (\\n First TestEnum = iota * 3\\n Second\\n)\\n\\nfmt.Println(Second)\\n// 3 (1*3)\")])]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/iota_value.png'),\"alt\":\"iota value\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"iota value\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"byte-bit\"}}),_c('h1',{attrs:{\"data-number\":\"9\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"9\")]),_vm._v(\" Byte / Bit \"),_c('a',{attrs:{\"href\":\"#byte-bit\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"A byte is composed of 8 bits of memory. A bit is a binary digit. It’s either equal to 0 or 1.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/bit_byte.png'),\"alt\":\"Bit and bytes[fig:Bit-and-bytes]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Bit and bytes\"),_c('span',{attrs:{\"id\":\"fig:Bit-and-bytes\",\"label\":\"fig:Bit-and-bytes\"}},[_vm._v(\"[fig:Bit-and-bytes]\")])])],1),_c('p',[_vm._v(\"The indexing of bits is not natural; we start counting from right to left (and not left to right).\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"operations-on-bits\"}}),_c('h1',{attrs:{\"data-number\":\"10\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10\")]),_vm._v(\" Operations on bits \"),_c('a',{attrs:{\"href\":\"#operations-on-bits\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The first step before jumping to bitwise operators is to learn how to print the binary representation of a number.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"print-the-bits\"}}),_c('h2',{attrs:{\"data-number\":\"10.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.1\")]),_vm._v(\" Print the bits \"),_c('a',{attrs:{\"href\":\"#print-the-bits\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To print the bits of a number, you can use the fmt.Printf() function with the format specifier \"),_c('strong',[_vm._v(\"%08b.\")]),_vm._v(\"08 means that we will print the binary value on 8 bits.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/print-bits/main.go\\npackage main\\n\\nimport \\\"fmt\\\"\\n\\nfunc main() {\\n var x uint8\\n x = 1\\n fmt.Printf(\\\"%08b\\\\n\\\", x)\\n //00000001\\n x = 2\\n fmt.Printf(\\\"%08b\\\\n\\\", x)\\n //00000010\\n x = 255\\n fmt.Printf(\\\"%08b\\\\n\\\", x)\\n //11111111\\n}\")])]),_c('p',[_vm._v(\"In the previous code listing, we define X, an unsigned integer stored on 8 bits. X can take the values from 0 to 255. We assign to x the value 1, then 2, and 255. Each time we are printing the binary representation.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"bitwise-operations\"}}),_c('h2',{attrs:{\"data-number\":\"10.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2\")]),_vm._v(\" Bitwise operations \"),_c('a',{attrs:{\"href\":\"#bitwise-operations\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To do operations on bits, we need operators. We call those operators “bitwise operators” In this section, we will go through all of them. Operations on bits can be intimidating initially, but they are nothing else than boolean logic. If you are already familiar with AND, OR, XOR, etc... it will be easy to understand.\")]),_c('p',[_vm._v(\"An operation can be decomposed into three elements :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The operator\")])]),_c('li',[_c('p',[_vm._v(\"The operands\")])]),_c('li',[_c('p',[_vm._v(\"The result\")])])]),_c('p',[_vm._v(\"For instance, in the operations \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x | y = z\")])]),_vm._v(\" \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"y\")])]),_vm._v(\" are operands\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"|\")])]),_vm._v(\" is the operator\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"z\")])]),_vm._v(\" is the result For each operator, the same logic applies. Operations are performed independently on each bit of the operands.\")]),_c('p',[_vm._v(\"Bitwise operators do not have to be mixed up with logical operators (&&, || and !). Those operators are used to compare boolean values from left to right.\")]),_c('ul',[_c('li',[_vm._v(\"Warning: you can use the following operators with integers only.\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"and-operator\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.1\")]),_vm._v(\" AND operator : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&\")])]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#and-operator\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_vm._v(\"If \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"y\")])]),_vm._v(\" are two bits\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x & y\")])]),_vm._v(\" is equal to 1 only if \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"y\")])]),_vm._v(\" are equal to 1.\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Otherwise \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x & y\")])]),_vm._v(\" is equal to 0. J\")])]),_c('li',[_c('p',[_vm._v(\"ust remember that it’s only true if \"),_c('strong',[_vm._v(\"both\")]),_vm._v(\" operands are true.\")])])]),_c('table',[_c('caption',[_vm._v(\"AND bitwise operator\")]),_c('thead',[_c('tr',{staticClass:\"header\"},[_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"x\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"y\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"x&y\")])])]),_c('tbody',[_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")])])])]),_c('p',[_vm._v(\"Let’s take an example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-operations/main.go \\n\\nvar x, y, z uint8\\nx = 1 // 00000001\\ny = 2 // 00000010\\nz = x & y\\n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 00000000\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 0\")])]),_c('p',[_vm._v(\"3 integers variables are created (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"y\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"z\")])]),_vm._v(\"). Then we store \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x & y\")])]),_vm._v(\" in the variable \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"z\")])]),_vm._v(\".\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/and_bitwise.png'),\"alt\":\"AND bitwise operation example[fig:AND-bitwise-operation]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"AND bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:AND-bitwise-operation\",\"label\":\"fig:AND-bitwise-operation\"}},[_vm._v(\"[fig:AND-bitwise-operation]\")])])],1),_c('p',[_vm._v(\"As shown in figure \"),_c('a',{attrs:{\"href\":\"#fig:AND-bitwise-operation\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:AND-bitwise-operation\"}},[_vm._v(\"2\")]),_vm._v(\" we take each bit individually, and then we are calculating the result of every; that’s single operation : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 1 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 & 0 = 0\")])]),_vm._v(\" Note that we begin by the right side. Get used to it; that’s the rule when you manipulate bits.\")]),_c('p',[_vm._v(\"Let’s take another example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-operation-and/main.go \\n\\nvar x, y, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\ny = 100 // 01100100\\nfmt.Printf(\\\"%08b\\\\n\\\", y)\\n\\nz = x & y\\n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 01000000\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 64\")])]),_c('p',[_vm._v(\"In the figure \"),_c('a',{attrs:{\"href\":\"#fig:AND-ex-2\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:AND-ex-2\"}},[_vm._v(\"3\")]),_vm._v(\" you can see the detail of the operation \"),_c('span',{staticClass:\"math inline\"},[_vm._v(\"200\\\\&100\")]),_vm._v(\".\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/200_and_100.png'),\"alt\":\"AND bitwise operation example[fig:AND-ex-2]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"AND bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:AND-ex-2\",\"label\":\"fig:AND-ex-2\"}},[_vm._v(\"[fig:AND-ex-2]\")])])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"or-operator\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.2\")]),_vm._v(\" OR operator : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"|\")])]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#or-operator\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x | y\")])]),_vm._v(\" is equal to 1 if :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"one of the operands is equal to 1\")])]),_c('li',[_c('p',[_vm._v(\"both operands are equal to 1.\")])])]),_c('table',[_c('caption',[_vm._v(\"OR bitwise operator\")]),_c('thead',[_c('tr',{staticClass:\"header\"},[_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"x\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"y\")]),_c('th',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"x|y\")])])]),_c('tbody',[_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")])]),_c('tr',{staticClass:\"odd\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")])]),_c('tr',{staticClass:\"even\"},[_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"0\")]),_c('td',{staticStyle:{\"text-align\":\"center\"}},[_vm._v(\"1\")])])])]),_c('p',[_vm._v(\"Here is an example in go :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-or/main.go \\n\\nvar x, y, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\ny = 100 // 01100100\\nfmt.Printf(\\\"%08b\\\\n\\\", y)\\n\\nz = x | y\\n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 11101100\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 236\")])]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/or_bitwise.png'),\"alt\":\"OR bitwise operation example[fig:OR-ex]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"OR bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:OR-ex\",\"label\":\"fig:OR-ex\"}},[_vm._v(\"[fig:OR-ex]\")])])],1),_c('p',[_vm._v(\"In the figure \"),_c('a',{attrs:{\"href\":\"#fig:OR-ex\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:OR-ex\"}},[_vm._v(\"4\")]),_vm._v(\" you can see that we apply the or operation bit by bit. Starting from the right : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 1 = 1\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1 | 0 = 1\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 0 = 0\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 1 = 1\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1 | 1 = 1\")])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0 | 1 = 1\")])]),_vm._v(\" When we use the base ten notation for the operands and the result, it does not make sense. Let’s use the binary notation :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"11001000 | 01100100 = 11101100\")])]),_c('p',[_vm._v(\"With OR, we set to 1 the bits of the left operand that are set to 1 in the right operand. (you can switch left and right, and this will also work).\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"xor-operator\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.3\")]),_vm._v(\" XOR operator : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^\")])]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#xor-operator\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The XOR abbreviation stands for e \"),_c('strong',[_vm._v(\"X\")]),_vm._v(\"clusive \"),_c('strong',[_vm._v(\"OR\")]),_vm._v(\". Why do we need to add another or? Is the one that we defined before not sufficient? Remember that with \"),_c('strong',[_vm._v(\"OR\")]),_vm._v(\" we have the following result \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1 | 1 = 1\")])]),_vm._v(\".\")]),_c('p',[_vm._v(\"When both operands are true, the result is true. Sometimes this behavior isn’t acceptable. We want maybe to exclude that case.\")]),_c('p',[_vm._v(\"With the exclusive or : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1 ^ 1 = 0\")])]),_vm._v(\". To be more precise, we have the following rule that applies: \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x ^ y\")])]),_vm._v(\" \"),_c('strong',[_vm._v(\"is equal to 1 only if one of the operands is equal to 1, not both.\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-xor/main.go \\n\\nvar x, y, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\ny = 100 // 01100100\\nfmt.Printf(\\\"%08b\\\\n\\\", y)\\n\\nz = x ^ y\\n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 10101100\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 172\")])]),_c('p',[_vm._v(\"The XOR set to 0 the bits that are identical in the two operands and set to 1 the bits that are different.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"not-operator\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.4\")]),_vm._v(\" NOT Operator : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^\")])]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#not-operator\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The NOT operator is the same as the XOR operator except that we use it in front of only one operand. It’s pretty easy to remember because this operator will reverse the values that will be stored by each bit :\")]),_c('ul',[_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^0 = 1\")])])])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^1 = 0\")])])])])]),_c('p',[_vm._v(\"NOT will invert the values of the bits. Let’s take an example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-not/main.go \\n\\nvar x, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\nz = ^x\\n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 00110111\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 55\")])]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/not_bitwise.png'),\"alt\":\"NOT bitwise operation example[fig:NOT-bitwise-operation]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"NOT bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:NOT-bitwise-operation\",\"label\":\"fig:NOT-bitwise-operation\"}},[_vm._v(\"[fig:NOT-bitwise-operation]\")])])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"and-not-operator-bit-clear\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.5\")]),_vm._v(\" AND NOT operator : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&^\")])]),_vm._v(\" (bit clear) \"),_c('a',{attrs:{\"href\":\"#and-not-operator-bit-clear\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The AND NOT operator is used to set to zero the bits of the left operand if the corresponding bit in the right operand is set to 1. This might be obscure, so I suggest you to take a look at the figure \"),_c('a',{attrs:{\"href\":\"#fig:AND-NOT\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:AND-NOT\"}},[_vm._v(\"6\")]),_vm._v(\".\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/and_not_bitwise.png'),\"alt\":\"AND NOT bitwise operation example[fig:AND-NOT]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"AND NOT bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:AND-NOT\",\"label\":\"fig:AND-NOT\"}},[_vm._v(\"[fig:AND-NOT]\")])])],1),_c('p',[_vm._v(\"This operator mixes the operator AND and NOT. We can decompose it :\")]),_c('ul',[_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x AND NOT y\")])]),_vm._v(\" is equivalent to :\")])]),_c('li',[_c('p',[_vm._v(\"x AND (NOT y)\")])])]),_c('p',[_vm._v(\"Let’s try to obtain the same result as before with this decomposition :\")]),_c('p',[_vm._v(\"Let’s denote :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"x = 11001000\")])]),_c('li',[_c('p',[_vm._v(\"y = 11111111\")])]),_c('li',[_c('p',[_vm._v(\"NOT y = 00000000\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"x AND NOT y\")])]),_vm._v(\" is equivalent to\")])]),_c('li',[_c('p',[_vm._v(\"11001000 AND 00000000 = 00000000\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"left-and-right-shift\"}}),_c('h3',{attrs:{\"data-number\":\"10.2.6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.6\")]),_vm._v(\" Left and right shift (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"<<\")])]),_vm._v(\" , \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\">>\")])]),_vm._v(\" ) \"),_c('a',{attrs:{\"href\":\"#left-and-right-shift\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Those operators are used to \"),_c('strong',[_vm._v(\"move\")]),_vm._v(\" the bits to the left or to the right.\")]),_c('p',[_vm._v(\"You have to specify the number of positions by which the bits will be shifted.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"left-shift\"}}),_c('h4',{attrs:{\"data-number\":\"10.2.6.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.6.1\")]),_vm._v(\" Left shift \"),_c('a',{attrs:{\"href\":\"#left-shift\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-left-shift/main.go \\n\\nvar x, n, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\n// number of positions\\nn = 1\\nz = x << n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 10010000\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 144\")])]),_c('p',[_vm._v(\"In the previous example, we are left-shifting the byte 11001000 by one position. The result of this shift is 1001000\"),_c('strong',[_vm._v(\"0.\")]),_vm._v(\" We have added a zero at the left of the byte and shifted the other by 1 position as you can see in the figure \"),_c('a',{attrs:{\"href\":\"#fig:LEFT-SHIFT-bitwise\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:LEFT-SHIFT-bitwise\"}},[_vm._v(\"7\")]),_vm._v(\".\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/left_shift.png'),\"alt\":\"LEFT SHIFT bitwise operation example[fig:LEFT-SHIFT-bitwise]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"LEFT SHIFT bitwise operation example\"),_c('span',{attrs:{\"id\":\"fig:LEFT-SHIFT-bitwise\",\"label\":\"fig:LEFT-SHIFT-bitwise\"}},[_vm._v(\"[fig:LEFT-SHIFT-bitwise]\")])])],1),_c('p',[_vm._v(\"We are storing our integers into 8 bits, so we are losing bits. to avoid that, we can store our numbers on 16 bits (2 bytes) :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"var x, n, z uint16\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\n// number of positions\\nn = 1\\nz = x << n\\n// print in binary\\nfmt.Printf(\\\"%b\\\\n\\\", z)\\n// 110010000\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 400\")])]),_c('p',[_vm._v(\"You can note something interesting; we have multiplied our number by 2.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"200 << 1 = 400\")])]),_c('p',[_vm._v(\"When you \"),_c('strong',[_vm._v(\"left shift\")]),_vm._v(\" the binary representation of a number by n position you \"),_c('strong',[_vm._v(\"multiply\")]),_vm._v(\" it’s decimal representation bt it by two at the power n.\")]),_c('p',[_vm._v(\"For instance, if you left shift by 3, you will multiply your number by two at the power three, which is 8 :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"var x, n, z uint16\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\n// number of positions\\nn = 3\\nz = x << n\\n// print in binary\\nfmt.Printf(\\\"%b\\\\n\\\", z)\\n// 11001000000\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 1600\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"right-shift\"}}),_c('h4',{attrs:{\"data-number\":\"10.2.6.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.2.6.2\")]),_vm._v(\" Right Shift \"),_c('a',{attrs:{\"href\":\"#right-shift\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The operator >> allow you to shifts the bits to the right :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/bitwise-right-shift/main.go \\n\\nvar x, n, z uint8\\nx = 200 // 11001000\\nfmt.Printf(\\\"%08b\\\\n\\\", x)\\n\\n// number of positions\\nn = 3\\nz = x >> n\\n// print in binary\\nfmt.Printf(\\\"%08b\\\\n\\\", z)\\n// 00011001\\n\\n// print in base 10\\nfmt.Printf(\\\"%d\\\\n\\\", z)\\n// 25\")])]),_c('p',[_vm._v(\"You can see here that we are dividing 200 by 3 when we shift the bytes to the right. This is another property of binary numbers. When you left shift the binary representation of a number (in base 10) by n position, you divide it by two at the power n.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"bitmasks-advancedsecbitmasks\"}}),_c('h1',{attrs:{\"data-number\":\"11\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11\")]),_vm._v(\" Bitmasks (advanced)\"),_c('span',{attrs:{\"id\":\"sec:Bitmasks\",\"label\":\"sec:Bitmasks\"}},[_vm._v(\"[sec:Bitmasks]\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#bitmasks-advancedsecbitmasks\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Imagine that you are building a function that requires eight boolean values to be configured :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Is verbose mode activated?\")])]),_c('li',[_c('p',[_vm._v(\"Is configuration loaded from disk?\")])]),_c('li',[_c('p',[_vm._v(\"Is database connexion required?\")])]),_c('li',[_c('p',[_vm._v(\"Is logger activated?\")])]),_c('li',[_c('p',[_vm._v(\"Is debug mode activated?\")])]),_c('li',[_c('p',[_vm._v(\"Is support for float activated?\")])]),_c('li',[_c('p',[_vm._v(\"Is recovery mode activated?\")])]),_c('li',[_c('p',[_vm._v(\"Reboot on failure?\")])])]),_c('p',[_vm._v(\"What we can do instead is passing just an integer value. This integer value can represent the configuration.\")]),_c('p',[_vm._v(\"For instance, 01110001 (113 in base 10) will represent the following configuration :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Activated (1)\")])]),_c('li',[_c('p',[_vm._v(\"Deactivated (0)\")])]),_c('li',[_c('p',[_vm._v(\"Deactivated (0)\")])]),_c('li',[_c('p',[_vm._v(\"Deactivated (0)\")])]),_c('li',[_c('p',[_vm._v(\"Activated (1)\")])]),_c('li',[_c('p',[_vm._v(\"Activated (1)\")])]),_c('li',[_c('p',[_vm._v(\"Activated (1)\")])]),_c('li',[_c('p',[_vm._v(\"Deactivated (0)\")])])]),_c('p',[_vm._v(\"Remember that when bytes are involved, we read from right to left.\")]),_c('p',[_vm._v(\"What are the advantages?\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We improve the code readability; we pass only an argument instead of 8\")])]),_c('li',[_c('p',[_vm._v(\"We spare memory. If we had eight booleans, we have 8*8 bits = 64 bits used compared to only 8.\")])])]),_c('p',[_vm._v(\"We will use the left shift bitwise operation. The idea is the first configuration value is equal to 1 (00000001), and then for each new configuration variable, we will left shift the bit :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type MyConf uint8\\n\\nconst (\\n VERBOSE MyConf = 1 << iota\\n CONFIG_FROM_DISK\\n DATABASE_REQUIRED\\n LOGGER_ACTIVATED\\n DEBUG\\n FLOAT_SUPPORT\\n RECOVERY_MODE\\n REBOOT_ON_FAILURE\\n)\")])]),_c('p',[_vm._v(\"The values that are generated by this constant declaration are the following :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"VERBOSE : 00000001\")])]),_c('li',[_c('p',[_vm._v(\"CONFIG_FROM_DISK : 00000010\")])]),_c('li',[_c('p',[_vm._v(\"DATABASE_REQUIRED : 00000100\")])]),_c('li',[_c('p',[_vm._v(\"LOGGER_ACTIVATED : 00001000\")])]),_c('li',[_c('p',[_vm._v(\"DEBUG : 00010000\")])]),_c('li',[_c('p',[_vm._v(\"FLOAT_SUPPORT : 00100000\")])]),_c('li',[_c('p',[_vm._v(\"RECOVERY_MODE : 01000000\")])]),_c('li',[_c('p',[_vm._v(\"REBOOT_ON_FAILURE : 10000000\")])])]),_c('p',[_vm._v(\"We are left shifting the byte for each new constant by an iota. Remember that iota’s value increases when there is a new constant declared. The code listing above is equivalent to :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/flags/main.go \\n\\nconst (\\n VERBOSE MyConf = 1 << 0\\n CONFIG_FROM_DISK MyConf = 1 << 1\\n DATABASE_REQUIRED MyConf = 1 << 2\\n LOGGER_ACTIVATED MyConf = 1 << 3\\n DEBUG MyConf = 1 << 4\\n FLOAT_SUPPORT MyConf = 1 << 5\\n RECOVERY_MODE MyConf = 1 << 6\\n REBOOT_ON_FAILURE MyConf = 1 << 7\\n)\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"configuration-usage\"}}),_c('h5',{attrs:{\"data-number\":\"11.0.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11.0.0.0.1\")]),_vm._v(\" Configuration usage \"),_c('a',{attrs:{\"href\":\"#configuration-usage\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Now it’s time to use our configuration enum. The function that we will use is the following one :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/flags/main.go \\n\\nfunc MyComplexFunction(conf MyConf, databaseDsn string) {\\n //...\\n}\")])]),_c('p',[_vm._v(\"The configuration is now just a single argument of type MyConf (which is an uint8 behind).\")]),_c('p',[_vm._v(\"When we call our function, we just have to provide the required flags :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"MyComplexFunction(VERBOSE|REBOOT_ON_FAILURE, \\\"mysql...\\\")\")])]),_c('p',[_vm._v(\"Here we tell our function that we want to activate the verbose mode and reboot on failure. The value of VERBOSE|REBOOT_ON_FAILURE is equal to 10000001. Only two bits are set to 1, the first (VERBOSE) and the last (REBOOT_ON_FAILURE).\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"reading-a-configuration-variable\"}}),_c('h5',{attrs:{\"data-number\":\"11.0.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11.0.0.0.2\")]),_vm._v(\" Reading a configuration variable \"),_c('a',{attrs:{\"href\":\"#reading-a-configuration-variable\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To check if a flag is set, we can use the AND bitwise operation. For instance, if we want to check if the bit corresponding to REBOOT_ON_FAILURE is set in \"),_c('strong',[_vm._v(\"conf\")]),_vm._v(\"the following test can be used :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"conf & REBOOT_ON_FAILURE != 0\")])]),_c('p',[_vm._v(\"If the previous expression is true, it means that the flag is set.\")]),_c('p',[_vm._v(\"Let’s take an example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// enum-iota-bitmasks/flags/main.go \\n\\nfunc main(){\\n MyComplexFunction(VERBOSE|REBOOT_ON_FAILURE, \\\"test\\\")\\n}\\nfunc MyComplexFunction(conf MyConf, databaseDsn string) {\\n fmt.Printf(\\\"conf : %08b\\\\n\\\", conf)\\n test := conf & REBOOT_ON_FAILURE\\n fmt.Printf(\\\"test : %08b\\\\n\\\", test)\\n}\")])]),_c('p',[_vm._v(\"The execution of the previous program will output :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"conf : 10000001\\ntest : 10000000\")])]),_c('p',[_vm._v(\"The variable test is different of 0 (00000000 as a byte). It seems to work. Let’s take another example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"test2 := conf & CONFIG_FROM_DISK\")])]),_c('p',[_vm._v(\"is equal to 00000000. The flag is not set.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"toggle-a-specific-bitflag\"}}),_c('h5',{attrs:{\"data-number\":\"11.0.0.0.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11.0.0.0.3\")]),_vm._v(\" Toggle a specific bitflag \"),_c('a',{attrs:{\"href\":\"#toggle-a-specific-bitflag\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The operation to use here is the XOR. For instance, imagine that you have a config variable set, but you wish to activate a deactivated flag (or deactivate an activated flag) :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// toogle FLOAT_SUPPORT => Activate\\nconf = conf ^ FLOAT_SUPPORT\\ntest = conf & FLOAT_SUPPORT\\nfmt.Printf(\\\"test : %08b\\\\n\\\", test)\")])]),_c('p',[_vm._v(\"The previous snippet will output :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"test 00100000\")])]),_c('p',[_vm._v(\"The flag has been toggled; the test says that it is now activated.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"clear-a-specific-bitflag\"}}),_c('h5',{attrs:{\"data-number\":\"11.0.0.0.4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11.0.0.0.4\")]),_vm._v(\" Clear a specific bitflag \"),_c('a',{attrs:{\"href\":\"#clear-a-specific-bitflag\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To clear a flag, the bitwise operation to use is AND NOT. Here is an example where FLOAT_SUPPORT has been previously activated :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"conf = conf &^ FLOAT_SUPPORT\\ntest = conf & FLOAT_SUPPORT\\nfmt.Printf(\\\"test : %08b\\\\n\\\", test)\")])]),_c('p',[_vm._v(\"Will output \"),_c('strong',[_vm._v(\"00000000\")]),_vm._v(\", which means that the flag has been cleared from \"),_c('strong',[_vm._v(\"conf.\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"summary\"}}),_c('h4',{attrs:{\"data-number\":\"11.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11.0.0.1\")]),_vm._v(\" Summary \"),_c('a',{attrs:{\"href\":\"#summary\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/bitflags.png'),\"alt\":\"Go is a compiled language\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Go is a compiled language\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-yourself\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"12\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"12\")]),_vm._v(\" Test yourself \"),_c('a',{attrs:{\"href\":\"#test-yourself\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"questions\"}}),_c('h2',{attrs:{\"data-number\":\"12.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"12.1\")]),_vm._v(\" Questions \"),_c('a',{attrs:{\"href\":\"#questions\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"//snippet 1\\ntype Elem uint8\\n\\nconst (\\n OptB Elem = iota + 5\\n OptA\\n OptC\\n)\")])]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"True or False. Go version 1 supports enum types.\")])]),_c('li',[_c('p',[_vm._v(\"What is the value of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"OptA\")])]),_vm._v(\" in snippet 1 (see below)?\")])]),_c('li',[_c('p',[_vm._v(\"What are the binary operators for AND, OR, XOR, NOT, AND NOT?\")])]),_c('li',[_c('p',[_vm._v(\"What is the type of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"OptC\")])]),_vm._v(\"?\")])]),_c('li',[_c('p',[_vm._v(\"What is the operator to shift to the left a binary digit?\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"answers\"}}),_c('h2',{attrs:{\"data-number\":\"12.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"12.2\")]),_vm._v(\" Answers \"),_c('a',{attrs:{\"href\":\"#answers\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"True or False. Go version 1 supports enum types.\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"False\")])]),_c('li',[_c('p',[_vm._v(\"When you want to create an enum type, you will need to write additional methods\")])])])]),_c('li',[_c('p',[_vm._v(\"What is the value of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"OptA\")])]),_vm._v(\" in snippet 1 (see below)?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_vm._v(\"6 (1+5)\")])])]),_c('li',[_c('p',[_vm._v(\"What are the binary operators for AND, OR, XOR, NOT, AND NOT?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"AND : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&\")])])])]),_c('li',[_c('p',[_vm._v(\"OR : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"|\")])])])]),_c('li',[_c('p',[_vm._v(\"XOR : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^\")])])])]),_c('li',[_c('p',[_vm._v(\"NOT : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^\")])])])]),_c('li',[_c('p',[_vm._v(\"AND NOT : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"& ^\")])])])])])]),_c('li',[_c('p',[_vm._v(\"What is the type of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"OptC\")])]),_vm._v(\"?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Elem\")])])])])]),_c('li',[_c('p',[_vm._v(\"What is the operator to shift to the left a binary digit ?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\">>\")])])])])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"key-takeaways\"}}),_c('h1',{attrs:{\"data-number\":\"13\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13\")]),_vm._v(\" Key takeaways \"),_c('a',{attrs:{\"href\":\"#key-takeaways\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"An enumeration type (or enum) is a data type that is composed of a set of values explicitly defined\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Ex: The days of the week\")])]),_c('li',[_c('p',[_vm._v(\"Ex: The months of the year\")])]),_c('li',[_c('p',[_vm._v(\"Ex: The statuses of an e-commerce order (Created, Locked, Paid, Shipped, ...)\")])])])]),_c('li',[_c('p',[_vm._v(\"Go version 1 does not support enumeration types out of the box\")])]),_c('li',[_c('p',[_vm._v(\"However, you can follow this recipe to create an enum \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"E\")])])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Create a new type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"E\")])]),_vm._v(\".\")])]),_c('li',[_c('p',[_vm._v(\"The underlying type of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"E\")])]),_vm._v(\" is \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"int\")])])])]),_c('li',[_c('p',[_vm._v(\"Define a set of constants of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"E\")])])])]),_c('li',[_c('p',[_vm._v(\"The first constant has the value \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"0\")])]),_vm._v(\", the second \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"1\")])]),_vm._v(\", .…\")])]),_c('li',[_c('p',[_vm._v(\"Each constant is an enum element. They need to be named accordingly.\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"E\")])]),_vm._v(\" needs to implement the following interfaces \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"json.Marshaler, json.Unmarshaler, fmt.Stringer\")])]),_vm._v(\" (if you use JSON, if you use another marshaling format in your application, you will need to implement the required interfaces).\")])]),_c('li',[_c('p',[_vm._v(\"You can use a library to generate those implementations for you.\")])])])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"iota\")])]),_vm._v(\" is a predeclared identifier. It represents successive untyped \"),_c('strong',[_vm._v(\"integer\")]),_vm._v(\" constants.\")])]),_c('li',[_c('p',[_vm._v(\"We can use it in a “grouped” declaration of constants.\")])]),_c('li',[_c('p',[_vm._v(\"Its value starts at zero and is equal to the index of the constant.\")])]),_c('li',[_c('p',[_vm._v(\"A bit is a binary digit (0 or 1)\")])]),_c('li',[_c('p',[_vm._v(\"A byte is 8 bits.\")])]),_c('li',[_c('p',[_vm._v(\"Go has bitwise logical and shift operators. We can use them \"),_c('strong',[_vm._v(\"only with integers\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&\")])]),_vm._v(\" : AND\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"|\")])]),_vm._v(\" :OR\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"^\")])]),_vm._v(\" :XOR\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&^\")])]),_vm._v(\" :AND NOT\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"<<\")])]),_vm._v(\" :left shift\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\">>\")])]),_vm._v(\" :right shift\")])]),_c('li',[_c('p',[_vm._v(\"An \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"uint8\")])]),_vm._v(\" is stored in memory with 8 bits\")])]),_c('li',[_c('p',[_vm._v(\"You can use an \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"uint8\")])]),_vm._v(\" to pass a set of 8 boolean arguments to a function or method\")]),_c('ul',[_c('li',[_vm._v(\"We can use bitwise operators to check the value of those boolean arguments.\")])])])]),_c('h1',[_vm._v(\"Bibliography\")]),_c('ChapterBibliography',{attrs:{\"chapter-id\":\"Chap27EnumIotaAndBitmask\"}}),_c('b-row',{staticClass:\"ml-1 mr-1 \"},[_c('b-col',{staticClass:\"text-center border mr-1 p-2\"},[_c('router-link',{attrs:{\"to\":{name:'Chap26BasicHttpServer'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Previous\")])])]),_c('p',[_c('small',[_vm._v(\"Basic HTTP Server\")])])])],1),_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('router-link',{attrs:{\"to\":{name:'Chap28DatesAndTime'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Next\")])])]),_c('p',[_c('small',[_vm._v(\"Dates and time\")])])])],1)],1),_c('b-row',{staticClass:\"mt-1 ml-1 mr-1\"},[_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('b-link',{attrs:{\"to\":{name:'Home'}}},[_vm._v(\"Table of contents\")])],1)],1),_c('FeedbackInvite'),_c('NewsletterInput'),_c('Footer')],1),_c('b-col')],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap27EnumIotaAndBitmask.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap27EnumIotaAndBitmask.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Chap27EnumIotaAndBitmask.vue?vue&type=template&id=392cb4aa&scoped=true&\"\nimport script from \"./Chap27EnumIotaAndBitmask.vue?vue&type=script&lang=js&\"\nexport * from \"./Chap27EnumIotaAndBitmask.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"392cb4aa\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/left_shift.59d06f30.png\";"],"sourceRoot":""}