数据编码模板
原码、反码、补码——计算机如何表示和存储整数
原码
反码
补码
编码
GESP3
#include <bits/stdc++.h>
using namespace std;
int main() {
// 查看整数的二进制表示
int a = 5;
cout << bitset<8>(a) << endl; // 00000101
cout << bitset<8>(-a) << endl; // 11111011 (补码)
// 补码理解
// 正数:补码 = 原码
// 负数:补码 = 反码 + 1
// 例如 -5: 原码 10000101 → 反码 11111010 → 补码 11111011
// 为什么用补码?
// 1. 统一了加减法:5 + (-5) = 0
// 2. 避免了 +0 和 -0 的问题
// 验证补码加法
int x = 5, y = -5;
cout << bitset<8>(x) << endl; // 00000101
cout << bitset<8>(y) << endl; // 11111011
cout << bitset<8>(x+y) << endl; // 00000000
// ASCII 编码
char ch = 'A';
cout << (int)ch << endl; // 65
cout << char(97) << endl; // 'a'
// 大小写转换
char upper = 'A', lower = upper + 32; // 'a'
// 或者
lower = upper - 'A' + 'a';
return 0;
}
📖 要点说明
- 正数的原码=反码=补码,负数补码=反码+1
- 补码统一了加减法,消除了±0问题
- ASCII:
'A'=65,'a'=97,'0'=48 - 大小写差 32:
'a' - 'A' = 32
⚠️ 常见错误
- 混淆原码和补码:
-5的 8 位补码是11111011 - 大小写转换搞反方向
char存的是 ASCII 值,不是数字本身