在计算机世界中,整数的存储和运算方式与数学中的概念略有不同。为了高效处理正负数,计算机采用 原码、反码和补码 的方式表示整数。此外,位运算 作为底层优化的利器,广泛应用于程序开发、数据加密、图像处理等领域。本文将详细解析整数的表示方式,并深入剖析常见的位运算符。
计算机内部的整数存储方式通常基于二进制,在这之上,为了区分正负数,引入了 符号位(最高位,0 代表正数,1 代表负数)。在存储负数时,计算机采用了 原码、反码和补码 三种表示方式,其中补码是实际存储的格式。
原码的表示方式很直观,即:
例如,在 8 位二进制系统中:
+5 的原码:00000101
-5 的原码:10000101但这种表示方式存在问题:
(+1) + (-1) ≠ 0(需要额外的处理)。00000000 和 10000000),造成存储浪费。反码的规则:
例如:
+5 的反码:00000101
-5 的反码:11111010反码的优势:
-5 = 5 取反)。00000000 和 11111111)。补码是在反码的基础上 +1:
例如:
+5 的补码:00000101
-5 的补码:11111011 (反码 11111010 +1)补码的优势:
(+1) + (-1) = 0)。总结:
数值 | 原码 | 反码 | 补码(实际存储) |
|---|---|---|---|
+5 | 00000101 | 00000101 | 00000101 |
-5 | 10000101 | 11111010 | 11111011 |
+0 | 00000000 | 00000000 | 00000000 |
-0 | 10000000 | 11111111 | 00000000 |
计算机的位运算是在二进制位上进行的运算,速度极快,常用于优化程序性能。
规则:
示例
int a = 5; // 00000101
int b = 3; // 00000011
int c = a & b; // 00000001 (1)应用:
n & 1 == 0 则为偶数,否则为奇数。规则:
示例
int a = 5; // 00000101
int b = 3; // 00000011
int c = a | b; // 00000111 (7)应用:
x | (1 << n) 将第 n 位设为 1。规则:
a ^ a = 0,a ^ 0 = a。a ^ b ^ a = b,可以用于 交换变量值。示例
int a = 5; // 00000101
int b = 3; // 00000011
int c = a ^ b; // 00000110 (6)应用:
a = a ^ b;
b = a ^ b;
a = a ^ b;规则:
~x = -x-1。示例
int a = 5; // 00000101
int b = ~a; // 11111010 (-6 的补码)规则:
×2^n(左移填充 0)。示例
int a = 5; // 00000101
int b = a << 2; // 00010100 (20)应用:
x << 3 == x * 8规则:
示例
int a = -5; // 11111011
int b = a >> 2; // 11111110 (-2)应用:
x >> 3 == x / 8& 取某些位| 设某些位^ 交换变量~ 取反<< 乘法>> 除法理解 原码、反码、补码 以及 位运算,不仅能帮助我们优化代码,还能在底层开发中游刃有余。掌握这些知识,将使你在编程道路上更进一步! 🚀
最后插一句:
我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=hpiyamye8bk