C语言 06 无符号数
所有的数据底层都是采用二进制来进行保存的。
第一位用于保存符号位。
如果不考虑这个符号位,那么所有的数都是按照正数来表示。
比如考虑了符号位的 char
类型:
- 考虑符号表示范围:-128 ~ 127
- 不考虑符号:0 ~ 255
直接使用这些不带符号位的数据类型:
#include <stdio.h>
int main() {
// 数据类型前面添加unsigned关键字表示采用无符号形式
unsigned char c = -65;
// %u以无符号形式输出十进制数据
printf("%u", c);
}
191
来看看为什么得到的是 191 这个数字。
char 类型占据 1 个字节,8 个 bit 位:
-65 的补码形式 => 1011 1111
由于现在没有符号位,一律都是正数,所以:1011 1111 = 128 + 32 + 16 + 8 + 4 + 2 + 1 = 191
再来看看无符号 int 的最大值:
#include <stdio.h>
int main() {
int i = -1;
printf("%u", i);
}
4294967295
无符号 int 的最大值正是 4294967295。
int 类型占据 4 个字节,32 个 bit 位:
-1 的补码形式 => 1111 1111 1111 1111
由于现在没有符号位,一律都是正数,所以:1111 1111 1111 1111 = 2^31 + 2^30 + ......+ 2^1 + 2^0 = 4294967295
天河有尽身作涯,星海无边前是岸。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-03-31 Spring源码 21 Bean生命周期
2022-03-31 Spring源码 20 手写模拟
2022-03-31 Spring源码 05 IOC 注解方式