不得不了解的整形提升问题

简介: 时光飞逝,想不到已经连续更新了30天了,嘿嘿,11月满勤了!!!也希望我写的关于C语言的知识对你们有所帮助!感谢大家的支持!


笔者复习C语言,所以笔者将会在掘金每天更新一篇关于C语言的文章! 各位初学C语言的大一新生,以及想要进行C语言回顾的老铁们的不要错过哦! 夯实基础,慢下来就是快!



整型提升是什么

当char和short等小于两个字节的类型变量运算时,会先提升为整形再进行运算



整形提升规则

对于无符号数:补0

对于有符号数:补符号位



题目1:

int main()
{
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;
    printf("a = %d,b = %d,c = %d",a,b,c);
    return 0;
}
复制代码


解析:

%d: 以有符号整数进行打印

a,b,c都为char类型,进行运算时会发生整型提升



内存中存放的是补码,而打印使用的是原码

-1:补码:11111111 11111111 11111111 11111111

由于a,b,c为char类型,会发生截断,从低字节往高字节取8个比特位



a,b为有符号数,整型提升补符号位,即补1

c为无符号数,整形提升补0


  • 先写出原码->内存中的补码
  • 由于是char类型 只能存8个bit  发生截断
  • 进行打印->发生整形提升,
int main()
{
    //-1
    //原码:10000000 00000000 00000000 00000001
    //反码:11111111 11111111 11111111 11111110
    //补码:11111111 11111111 11111111 11111111
    //-------------------------------------------
    char a = -1;
    //a :1111 1111
    //整形提升高位补符号位
    //11111111 11111111 11111111 11111111 ->补码
    //打印的是原码,所以要转化为原码
    //11111111 11111111 11111111 11111111 ->对应原码的值为-1
    signed char b = -1;
    //b :1111 1111
    //整形提升高位补符号位
    //11111111 11111111 11111111 11111111 ->补码
    //打印的是原码,所以要转化为原码
    //11111111 11111111 11111111 11111111 ->对应原码的值为-1
    unsigned char c = -1;
     //c :1111 1111
    //无符号类型,整形提升高位补0
    //00000000 00000000 00000000 11111111 ->补码
    //符号位为0,正数,原码反码补码相同
    //00000000 00000000 00000000 11111111->原码->值为255
    printf("a = %d,b = %d,c = %d",a,b,c);
    // -1 -1 255
    return 0;
}
复制代码


题目2:

int main()
{
    char a = -128;
    printf("%u\n",a);  //4294967168
    return 0;
}
复制代码


解析:

思路:先写出a的原码->得出补码(内存中存放的是补码)

注意:a为char类型,只能存放8位,会发生截断

int main()
{
    char a = -128;
    // -128
    //原码:10000000 00000000 00000000 10000000
    //反码:11111111 11111111 11111111 01111111
    //补码:11111111 11111111 11111111 10000000
    //------------------------------
    //由于a为char类型,只能存放8bit,会发生截断
    //a : 10000000
    //有符号类型 整形提升:补符号位
    //11111111 11111111 11111111 10000000 ->补码
    //%u:以无符号整形打印
    //所以将11111111 11111111 11111111 10000000认为是无符号整形进行打印->符号位不代表正负,对应的值很大
    printf("%u\n",a);  //4294967168
    return 0;
}


相关文章
|
6月前
|
机器学习/深度学习 人工智能 并行计算
C++在人工智能与机器学习中的应用——当传统语言拥抱新浪潮
人工智能和机器学习正在重塑世界,而C++正在这个浪潮中扮演着关键角色。虽然Python在AI研究和原型开发中占据主导地位,但在模型训练、推理部署、框架底层、边缘AI等高性能场景中,C++是不可替代的力量。本文将深入探讨C++在人工智能领域的各种应用。
498 1
|
3月前
|
人工智能 知识图谱 开发者
国产大模型AI可见度优化方法论(AIVO Standard V3.0)
《国产大模型可见度优化方法论(AIVO Standard V3.0)》是国内首套适配文心一言、通义千问等7大国产大模型的系统化可见度标准,覆盖九大实施阶段、PSOS™量化体系及多模态优化,全面替代传统SEO,严格符合《网络安全法》等国内法规,助力品牌在AI时代实现高曝光、高可信、稳推荐。(239字)
1035 0
|
Linux iOS开发 开发者
Qt问题(二):无法定位程序输入点于动态链接库
动态链接库(Dynamic Link Library,简称DLL)是一种可执行文件格式,常见于Windows操作系统中,而在Linux和macOS等其他操作系统中,相似的概念通常被称为共享库(Shared Library)。动态链接库允许程序在运行时加载所需的代码和数据,而不是在编译时静态链接到应用程序中。这种方式带来了几个重要的优点:
2752 3
|
Java 图形学 Python
用Python和Pygame打造绚丽烟花效果+节日祝福语
本文介绍了一款基于Python和Pygame库实现的烟花效果程序,模拟烟花发射、爆炸及粒子轨迹,结合动态文本显示祝福语,营造逼真的节日氛围。程序包括烟花类、粒子类、痕迹类和动态文本显示功能,通过随机化颜色、速度和粒子数量增加效果多样性。用户可以看到烟花从屏幕底部发射、上升并在空中爆炸,伴随粒子轨迹和动态祝福语“蛇年大吉”、“Happy Spring Festival”。文章详细解析了核心代码逻辑和技术要点,帮助读者理解如何利用Pygame库实现复杂视觉效果,并提供了未来改进方向,如优化性能、增加特效和增强交互性。
1719 20
用Python和Pygame打造绚丽烟花效果+节日祝福语
|
机器学习/深度学习 人工智能 Serverless
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
满血 DeepSeek 免费用!支持联网搜索!创作声明:真人攥写-非AI生成,Written-By-Human-Not-By-AI
8115 11
👉「免费满血DeepSeek实战-联网搜索×Prompt秘籍|暨6平台横评」
|
人工智能 JSON API
利用TTS技术让你的AI Agent发声
【10月更文挑战第5天】
1451 4
利用TTS技术让你的AI Agent发声
|
存储 自然语言处理 自动驾驶
基于LLM打造沉浸式3D世界
基于LLM打造沉浸式3D世界
|
安全 UED 开发者
微信扫码登录--设计技术分享
【8月更文挑战第7天】在当今的数字化时代,微信扫码登录已成为众多网站和应用提升用户体验、简化登录流程的重要手段。本文将围绕微信扫码登录的设计原理、实现步骤及关键技术点进行技术分享,帮助开发者更好地理解和应用这一功能。
1948 0
|
人工智能 搜索推荐 决策智能
【AI Agent系列】【阿里AgentScope框架】1. 深入源码:详细解读AgentScope中的智能体定义以及模型配置的流程
【AI Agent系列】【阿里AgentScope框架】1. 深入源码:详细解读AgentScope中的智能体定义以及模型配置的流程
3129 0
|
负载均衡 Java 微服务
Java中的可扩展微服务架构设计案例解析
Java中的可扩展微服务架构设计案例解析