Wrapping a character code for a Caesar Cipher
Your solutions have subtle off-by-one errors. Your second solution partially fixes these by adding 1 to the result in some cases, but it doesn't fix the real problem, which is this:

(let [,,,
      code-range (- max-code min-code)]
  ,,,)


code-range needs to hold the number of integers from 32 to 126, inclusive. As Dijkstra famously noted, calculating this number is easy when you're using an inclusive-exclusive range, but when your range is inclusive on both ends, you need to account for that by adding 1:

(let [,,,
      code-range (- (inc max-code) min-code)]
  ,,,)


In response to your questions about repetition and performance: there's a function for that! Unlike rem, Clojure's mod function always returns a nonnegative value, so you can do this:

(defn wrap-shifted-code [char-code]
  (let [min-code 32
        max-code 126
        code-range (- (inc max-code) min-code)]
    (-&gt; char-code (- min-code) (mod code-range) (+ min-code))))