In logic and mathematics, negation (usually expressed by 'not') is an operation on propositions. For example, in classical logic negation is normally interpreted by the truth function that takes truth to falsity and vice versa. In intuitionistic logic, according to the Brouwer–Heyting–Kolmogorov interpretation, the negation of a proposition P is the proposition whose proofs are the refutations of P. Intuitively, the negation of a proposition holds when that proposition is false. Recent studies have explored the relationship between the representation of the world in the brain and negation.
Contents 
Classical negation is an operation on one logical value, typically the value of a proposition, that produces a value of true when its operand is false and a value of false when its operand is true. So, if statement A is true, then ¬A (pronounced "not A") would therefore be false; and conversely, if ¬A is true, then A would be false.
The truth table of ¬p is as follows:
p  ¬p 

True  False 
False  True 
Classical negation can be defined in terms of other logical operations. For example, ¬p can be defined as p → F, where "→" is logical implication and F is absolute falsehood. Conversely, one can define F as p & ¬p for any proposition p, where "&" is logical conjunction. The idea here is that any contradiction is false. While these ideas work in both classical and intuitionistic logic, they do not work in Brazilian logic, where contradictions are not necessarily false. But in classical logic, we get a further identity: p → q can be defined as ¬p ∨ q, where "∨" is logical disjunction: "not p, or q".
Algebraically, classical negation corresponds to complementation in a Boolean algebra, and intuitionistic negation to pseudocomplementation in a Heyting algebra. These algebras provide a semantics for classical and intuitionistic logic respectively.
The negation of a proposition p is notated in different ways in various contexts of discussion and fields of application. Among these variants are the following:
Notation  Vocalization 

¬p  not p 
−p  not p 
~p  not p 
p prime,
p complement 

p bar,
bar p 

bang p 
No matter how it is notated or symbolized, the negation ¬p / −p can be read as "it is not the case that p", or usually more simply (though not grammatically) as "not p".
Within a system of classical logic, double negation, that is, the negation of the negation of a proposition p, is logically equivalent to the p. Expressed in symbolic terms, ¬(¬p) ⇔ p. In intuitionistic logic, a proposition implies its double negation but not conversely. This marks one important difference between classical and intuitionistic negation. Algebraically, classical negation is called an involution of period two.
However, in intuitionistic logic we do have the equivalence of ¬¬¬p and ¬p. Moreover, in the propositional case, a sentence is classically provable if its double negation is intuitionistically provable. This result is known as Glivenko's theorem.
~~
In Boolean algebra, a linear function is one such that:
If there exists a_{0}, a_{1}, ... , a_{n} {0,1} such that f(b_{1}, ... , b_{n}) = a_{0} ⊕ (a_{1} b_{1}) ⊕ ... ⊕ (a_{n} b_{n}), for all b_{1}, ... , b_{n} {0,1}.
Another way to express this is that each variable always makes a difference in the truthvalue of the operation or it never makes a difference. Negation is a linear logical operator.
In Boolean algebra a self dual function is one such that:
If f(a_{1}, ... , a_{n}) = ~f(~a_{1}, ... , ~a_{n}) for all a_{1}, ... , a_{n} {0,1}. Negation is a self dual logical operator.
There are a number of equivalent ways to formulate rules for negation. One usual way to formulate classical negation in a natural deduction setting is to take as primitive rules of inference negation introduction (from a derivation of p to both q and ¬q, infer ¬p; this rule also being called reductio ad absurdum), negation elimination (from p and ¬p infer q; this rule also being called ex falso quodlibet), and double negation elimination (from ¬¬p infer p). One obtains the rules for intuitionistic negation the same way but by excluding double negation elimination.
Negation introduction states that if an absurdity can be drawn as conclusion from p then p must not be the case (i.e. p is false (classically) or refutable (intuitionistically) or etc.). Negation elimination states that anything follows from an absurdity. Sometimes negation elimination is formulated using a primitive absurdity sign ⊥. In this case the rule says that from p and ¬p follows an absurdity. Together with double negation elimination one may infer our originally formulated rule, namely that anything follows from an absurdity.
Typically the intuitionistic negation ¬p of p is defined as p→⊥. Then negation introduction and elimination are just special cases of implication introduction (conditional proof) and elimination (modus ponens). In this case one must also add as a primitive rule ex falso quodlibet.
As in mathematics, negation is used in computer science to construct logical statements.
if (!(r == t)) { /*...statements executed when r does NOT equal t...*/ }
The "!" signifies logical NOT in B, C, and languages with a Cinspired syntax such as C++, Java, JavaScript, Perl, and PHP. "NOT" is the operator used in ALGOL 60, BASIC, and languages with an ALGOLinspired syntax such as Pascal, Ada, Eiffel and Seed7. Some languages (C++, Perl, etc.) provide more than one operator for negation. A few languages like PL/I and Ratfor, use ¬ for negation. Some modern computers and operating systems will display ¬ as ! on files encoded in ASCII.
In computer science there is also bitwise negation. This takes the value given and switches all the binary 1s to 0s and 0s to 1s. See bitwise operation. This is often used to create ones' complement or "~" in C or C++ and two's complement (just simplified to "" or the negative sign since this is equivalent to taking the arithmetic negative value of the number) as it basically creates the opposite (negative value equivalent) or mathematical complement of the value (where both values are added together they create a whole).
Take the following for example:
Say we wanted to get the absolute (positive equivalent) value of a given integer to following would work as the "" changes it from negative to positive (we know it is negative because it is true that "x < 0")
unsigned abs(int x) { if (x < 0) return x; else return x; }
To demonstrate logical negation:
unsigned abs(int x) { if (!(x < 0)) return x; else return x; }
Inverting the condition and reversing the outcomes produces code that is logically equivalent to the original code, i.e. will have identical results for any input. (Note that depending on the compiler used, the actual instructions performed by the computer may differ.)

Negation f.
