Back
Asciify Logo
Asciify

Exclamation Mark

! (Exclamation Mark) is ASCII code point 33 (0x21), Unicode U+0021, and a printable punctuation character. It marks emphasis or exclamatory tone in written language — the typographic equivalent of raising your voice. In programming it lives a double life as the logical NOT operator: !true evaluates to false in C, C++, Java, JavaScript, and most C-family languages. It also appears in != (not equal), CSS's !important, and the Unix shebang line #!/bin/bash that tells the kernel which interpreter to run a script with. In Bash, ! also triggers history expansion — typing !rm in an interactive shell reruns the last command starting with "rm," which catches developers off guard when they meant it literally. Early typewriters sometimes lacked a dedicated ! key — typists would type a period, backspace, and strike an apostrophe over it. UTF-8 encodes it as a single byte 0x21, identical to its ASCII value. Unicode classifies it as Po (Punctuation, Other) with the name EXCLAMATION MARK.

Punctuation

Technical Details

Code Example

</>
int ok = (value != 0);
int blocked = !ok; // logical NOT
if (!ptr) return -1; // null-check uses '!'
int changed = (a != b); // '!=' includes '!'

Frequently Asked Questions

  • The nickname 'bang' comes from typesetting and Unix culture. In shells, ! triggers history expansion (e.g., !! repeats the last command). The #! at the start of scripts is called a 'shebang' (shell + bang). The name stuck because it's faster to say than 'exclamation mark.'

  • In most C-like languages (C, Java, JavaScript), ! is logical NOT — it flips true to false. In Rust and TypeScript, ! also appears in types (never!) and macros (println!). In CSS, !important overrides specificity. In Git, ! in .gitignore negates a pattern.

  • Bash uses ! for history expansion — !$ means the last argument, !! means the last command. Inside double quotes, ! is still interpreted, which breaks strings containing it. Use single quotes or \! to include a literal exclamation mark.

  • != means 'not equal' in most languages. In JavaScript, != does type coercion (so '5' != 5 is false), while !== is strict comparison without coercion ('5' !== 5 is true). Python and C only have !=, which behaves like strict comparison.

@workani&@alexluthor
Privacy & legal

Privacy

No accounts, no ads, no tracking cookies, and no cross-site tracking. The only analytics we keep are faceless — anonymous, aggregated counts of pages and searches, never tied to you. We store no IP addresses, set no tracking cookies, and build no profiles. Cloudflare hosts the site and handles requests for delivery and security.

Full privacy policy·Extension privacy·legal@asciify.dev

Attributions & licenses

Twemoji
© Twitter, Inc and other contributors · CC-BY 4.0
Noto Color Emoji
© Google · Apache 2.0
Fluent UI Emoji
© Microsoft · MIT
OpenMoji
© HfG Schwäbisch Gmünd · CC-BY-SA 4.0
Toss Face
© Viva Republica (Toss) · SIL OFL 1.1
JoyPixels
© JoyPixels Inc. · Free Limited Use License
SerenityOS Emoji
© The SerenityOS Developers · BSD-2-Clause
EmojiTwo
© EmojiTwo contributors · CC-BY 4.0
Apple Color Emoji
© Apple, Inc.
Facebook Emoji
© Meta Platforms, Inc.

Apple and Facebook emoji styles are proprietary and shown here solely for reference and comparison — a common-sense application of nominative-use / fair-use principles. asciify is not affiliated with, endorsed by, or sponsored by Apple, Inc., Meta Platforms, Inc., or any other rights holder listed above. If a rights holder requests removal of their emoji style from this site, it will be removed.

All other vendor emoji are reproduced for reference and comparison under their respective open licenses listed above.

Character names and code points from the Unicode® Standard. Unicode® and the Unicode Logo are registered trademarks of Unicode, Inc.

Privacy
© asciify.dev 2025-2026