当前位置: 首页 > news >正文

C语言:截断+整型提升+算数转换练习

 详情关于整型提升、算数转换与截断见文章:

《C语言:整型提升》

 《C语言:算数转换》

一、代码一

int main()
{
    char a = -1;
    signed char b = -1;
    unsigned char c = -1;

    printf("%d %d %d", a, b, c);
    return 0;
}

 求输出结果

解析如下代码:

int main()
{char a = -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补(首位作符号位)//11111111111111111111111111111111111整型提升补//10000000 00000000 00000000 00000001整型提升原signed char b = -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补(首位作符号位)//11111111111111111111111111111111111整型提升补//10000000 00000000 00000000 00000001整型提升原unsigned char c = -1;//10000000 00000000 00000000 00000001原//11111111111111111111111111111111111补//11111111截断补(首位作普通位)//11111111111111111111111111111111111整型提升补//000000000000000000000000000011111111整型提升原printf("%d %d %d", a, b, c);//-1 -1 255return 0;
}

二、代码二

int main()
{
    char a = -128;

    printf("%u\n", a);
    return 0;
}

求输出结果

解析如下代码:

int main()
{char a = -128;//10000000 00000000 00000000 10000000原//11111111 11111111 11111111 10000000补//10000000截断补(首位作为符号位)//%u是打印十进制无符号数//11111111 11111111 11111111 10000000整型提升补(先整型提升,最高位补符号位)//11111111 11111111 11111111 10000000改无符号数补//11111111 11111111 11111111 10000000改无符号数原printf("%u\n", a);//4,294,967,168return 0;
}

三、代码三

int main()
{
    char a = 128;
    printf("%u\n", a);
    return 0;
}

求输出结果

解析如下代码:

int main()
{char a = 128;//00000000 00000000 00000000 10000000原//00000000 00000000 00000000 10000000补//10000000截断补(首位作为符号位)//%u是打印十进制无符号数//11111111 11111111 11111111 10000000整型提升补(最高位补符号位)//11111111 11111111 11111111 10000000改无符号数补//11111111 11111111 11111111 10000000改无符号数原printf("%u\n", a);//4,294,967,168return 0;
}

四、代码四

int main()
{
    int i = -20;
    unsigned int j = 10;
    printf("%d", i + j);

    return 0;
}

求输出结果

解析如下代码:

int main()
{int i = -20;//10000000 00000000 00000000 00010100原//11111111 11111111 11111111 11101100补//11111111 11111111 11111111 11101100算数转换补(符号位当做普通位)unsigned int j = 10;//00000000 00000000 00000000 00001010原//00000000 00000000 00000000 00001010补//i+j//11111111 11111111 11111111 11101100(i算数转换后的补码)//00000000 00000000 00000000 00001010(j补码)//11111111 11111111 11111111 11110110(i+j后的补码)无符号数//%d是打印十进制有符号数//11111111 11111111 11111111 11110110(i+j后的补码)改有符号数//10000000 00000000 00000000 00001010(i+j改有符号数后的原码)printf("%d", i + j);//-10return 0;
}

五、代码五

int main()
{
    unsigned int i;
    for (i = 9; i >= 0; i--)
    {
        printf("%u\n", i);
    }

    return 0;
}

求输出结果

解析如下代码:

int main()
{unsigned int i;for (i = 9; i >= 0; i--){printf("%u\n", i);}//无符号数9到0正常输出//当i = 0循环执行结束时,i--即 i = i - 1, i = -1//-1需要改为无符号数//11111111 11111111 11111111 11111111 (-1的补码)//11111111 11111111 11111111 11111111 (改无符号数后的补码)//11111111 11111111 11111111 11111111 (改无符号数后的原码)//结果:4,294,967,295//i又从4,294,967,295开始递减//每当i = 0循环执行结束时,i--又会回到4,294,967,295//所以程序死循环return 0;
}

 运行结果如下,陷入死循环

http://www.lryc.cn/news/152258.html

相关文章:

  • Java后端开发面试题——多线程
  • Redis 学习笔记
  • 华为云新生代开发者招募
  • DockerFile简明教程
  • Cygwin是什么?是Windows还是Linux?
  • 成集云 | 多维表格自动化管理jira Server项目 | 解决方案
  • 数据结构(Java实现)-排序
  • C++------vector【STL】
  • Matlab(变量与文本读取)
  • WebGPU学习(8)---使用RenderBundle
  • 【前端】常用功能合集
  • chatgpt谈论日本排放污水事件
  • Linux 查看当前目录大小
  • 操作系统备考学习 day1 (1.1.1-1.3.1)
  • HTTP:http上传文件的原理及java处理方法的介绍
  • [实习笔记] 字符串练习 (将大量的字符串用int值编码,然后通过int值二分快速查找某个字符串)
  • EMC VNX2代一键关机方法
  • 提升系统管理:监控和可观察性在DevOps中的作用
  • IIS搭建本地电脑服务器:通过内网穿透技术实现公网访问的步骤指南
  • Linux系统中驱动入门设备树DTS(经典)
  • 关系型数据库与非关系型数据库类比
  • Ubuntu入门03——Ubuntu用户操作
  • 输出图元(四)8-1 图元、屏幕坐标、指定二维世界坐标系统
  • 机器学习---决策树的划分依据(熵、信息增益、信息增益率、基尼值和基尼指数)
  • java解析json
  • PAT 1163 Dijkstra Sequence
  • 嵌入式学习之进程
  • C#-单例模式
  • WSNs 安全技术
  • H5如何做页面下拉刷新和上拉加载