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

这篇具有很好参考价值的文章主要介绍了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 255
    return 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,168
    return 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,168
    return 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);//-10

    return 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;
}

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

C语言:截断+整型提升+算数转换练习,c语言文章来源地址https://www.toymoban.com/news/detail-692642.html

到了这里,关于C语言:截断+整型提升+算数转换练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

    🚀 作者:阿辉不一般 🚀 你说呢: 生活本来沉闷,但跑起来就有风 🚀 专栏:爱上C语言 🚀 作图工具:draw.io ( 免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!! 大家好啊😉!今

    2024年02月05日
    浏览(42)
  • C语言练习4(巩固提升)

    前言 面对复杂变化的世界,人类社会向何处去?亚洲前途在哪里?我认为,回答这些时代之问,我们要不畏浮云遮望眼,善于拨云见日,把握历史规律,认清世界大势。 1、如果 x=2014 ,下面函数的返回值是( ) A: 20 B: 21 C: 23 D 25 💯答案解析: 😸正确答案:C 这个作用是对

    2024年02月10日
    浏览(41)
  • C语言练习1(巩固提升)

    前言 “人生在勤,勤则不匮。”幸福不会从天降,美好生活靠劳动创造。全面建成小康社会的奋斗目标,为广大劳动群众指明了光明的未来;全面建成小康社会的历史任务,为广大劳动群众赋予了光荣的使命;全面建成小康社会的伟大征程,为广大劳动群众提供了宝贵的机遇

    2024年02月11日
    浏览(21)
  • C语言练习2(巩固提升)

    前言 “志之所趋,无远弗届,穷山距海,不能限也。”对想做爱做的事要敢试敢为,努力从无到有、从小到大,把理想变为现实。要敢于做先锋,而不做过客、当看客,让创新成为青春远航的动力,让创业成为青春搏击的能量,让青春年华在为国家、为人民的奉献中焕发出绚

    2024年02月09日
    浏览(87)
  • C语言练习3(巩固提升)

    前言 奋斗是曲折的,“为有牺牲多壮志,敢教日月换新天”,要奋斗就会有牺牲,我们要始终发扬大无畏精神和无私奉献精神。奋斗者是精神最为富足的人,也是最懂得幸福、最享受幸福的人。正如马克思所讲:“历史承认那些为共同目标劳动因而自己变得高尚的人是伟大人

    2024年02月11日
    浏览(25)
  • C语言练习8(巩固提升)

    前言 奋斗是曲折的,“为有牺牲多壮志,敢教日月换新天”,要奋斗就会有牺牲,我们要始终发扬大无畏精神和无私奉献精神。奋斗者是精神最为富足的人,也是最懂得幸福、最享受幸福的人。正如马克思所讲:“历史承认那些为共同目标劳动因而自己变得高尚的人是伟大人

    2024年02月10日
    浏览(21)
  • C语言练习5(巩固提升)

    1,下面代码的结果是:( ) A.3 B.4 C.随机值 D.5 💯答案解析: 😸正确答案:C strlen是用来获取字符串的有效长度的,结尾标记’\\0’不包含在内。 strlen获取的规则非常简单:从前往后依次检测,直到遇到’\\0’是就终止检测。 而上题中 arr是一个字符数组,不是一个有效的字符

    2024年02月11日
    浏览(30)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(45)
  • 字符串和整型转换的那些事儿

    总的来说,有两种思路。 这种想法非常局限,是直接使用sprintf(),怎么改进呢?用循环。 这个循环的方式非常巧妙,利用strlen()作为不断增加的变化量,而当str赋初值都是0的时候,这些零对于字符串来说,相当于\\0,那么此时strlen检测出来的数量必然是0,这是一种需要记住

    2024年01月17日
    浏览(41)
  • Java 字节数组(byte[])和整型(int)的相互转换

          恰巧碰到了字节数组和整型的转换问题,特在此总结一下。将 int 按照小端法映射到 byte[] 中。即最低 8 位放在 byte[0] 中,依次类推。       这个实现起来比较简单,先保存最低的 8 位到 byte 数组中,然后不断的右移 8 位,每次保存低 8 位数据即可,参考代码:(

    2023年04月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包