For a value *V*, we write «*V*» for the binary encoding of *V*. {:.postcard-grammar.binarysyntax} «`#f`» | = | `80` «`#t`» | = | `81` {:.postcard-grammar.binarysyntax} «`@`*W* *V*» | = | `85` «*W*» «*V*» «`#!`*V*» | = | `86` «*V*» {:.postcard-grammar.binarysyntax} «*V*» | = | `87``08` **binary64**(*V*) | if *V* ∈ Double {:.postcard-grammar.binarysyntax} «*V*» | = | `B0` **varint**(|**intbytes**(*V*)|) **intbytes**(*V*) | if *V* ∈ SignedInteger «*V*» | = | `B1` **varint**(|**utf8**(*V*)|) **utf8**(*V*) | if *V* ∈ String «*V*» | = | `B2` **varint**(|*V*|) *V* | if *V* ∈ ByteString «*V*» | = | `B3` **varint**(|**utf8**(*V*)|) **utf8**(*V*) | if *V* ∈ Symbol {:.postcard-grammar.binarysyntax} «`<`*L* *F*1 ... *F*m`>`» | = | `B4` «*L*» «*F*1» ... «*F*m» `84` «`[`*X*1 ... *X*m`]`» | = | `B5` «*X*1» ... «*X*m» `84` «`#{`*E*1 ... *E*m`}`» | = | `B6` «*E*1» ... «*E*m» `84` «`{`*K*1`:`*V*1 ... *K*m`:`*V*m`}`» | = | `B7` «*K*1» «*V*1» ... «*K*m» «*V*m» `84` {:.postcard-grammar.binarysyntax} **varint**(*n*) | = | *n* | if *n* < 128 | | (*n* & 127) | 128 **varint**(*n* >> 7) | if *n* ≥ 128 {:.postcard-grammar.binarysyntax} **intbytes**(*n*) | = | the empty sequence if *n* = 0, otherwise **signedBigEndian**(*n*) {:.postcard-grammar.binarysyntax} **signedBigEndian**(*n*) | = | *n* & 255 | if −128 ≤ *n* ≤ 127 | | **signedBigEndian**(*n* >> 8) *n* & 255 | otherwise The function **binary64**(*D*) yields the big-endian 8-byte IEEE 754 binary representation of *D*.