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

posted @   天航星  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!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 注解方式
点击右上角即可分享
微信分享提示