柳叶lhy 2020-03-12 20:50 采纳率: 50%
浏览 366
已采纳

《Primer c++》中无符号类型赋值一个超出其范围的值,会出错吗??

今天在看《Primer c++》第五版的时候,看到书上说: 当我们赋值给无符号类型一个超出其范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。

#include<iostream>
using namespace std;
int main()
{
    unsigned char j=-1;
    cout<<"unsigned char j= "<<j<<endl;
    unsigned int i=-1;
    cout<<"unsigned int i= "<<i<<endl;
    return 0;
}

运行结果:

图片说明

对于unsigned int 类型的运行是没有错误的,而unsigned char 类型却不输出,这是什么原因呢?

请大佬指点。

  • 写回答

1条回答 默认 最新

  • BugM 2020-03-16 17:00
    关注

    在计算机中,数字是以其补码表示的,正数的补码和原码相同,负数的补码为其绝对值的反码再加1.
    因此对于一个字节的char类型,1的补码为00000001, -1的补码为11111111。

    由于无符号数没有符号位,所以-1的补码11111111的第一位不再表示符号位,其值对应的十进制值就为255。
    而cout对char类型的输出是输出其ascii码值代表的字符,也就是说这里应该输出ascii码为255的字符
    ascii码128到255,用于表示框线、音标、欧洲非英语系字母。如图可以看到,255没有输出什么东西
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况