C-为什么char c = 129将转换为-127?

 rain 发布于 2023-02-08 13:05

如果我们分配+128给char变量,那么它将被转换为-128二进制等效(10000000-first bit tells sign).二进制当量12910000001,它将被转换为什么值?

char c = 129;

谢谢,S

1 个回答
  • 实际上有几种可能性.

    如果char是签名类型,那么

    char c = 129;
    

    隐式将int值转换为char.结果是实现定义的(或者它可以引发实现定义的信号,但我不知道有任何实现这样做).在大多数实现中,转换产生 - 127因为带符号类型使用二进制补码表示.在无符号8位类型中,10000001表示值129; 在带符号的 8位类型中,相同的位模式表示-127; 转换不需要保持相同的位模式,但它通常是这样.

    如果plain char是无符号类型(就像在某些系统上那样),则该值129在范围内char,并且转换只是产生该值129.

    但所有这些都假设char是8位.C标准要求CHAR_BIT(字节中的位数,或等效于char对象中的位数)至少为 8,但允许它更大.您不太可能遇到系统CHAR_BIT > 8,但在DSP的 C实现中并不少见.

    取决于所有这一点很少是一个好主意.无论你想通过将129分配给一个char对象来实现它,都很可能有更好,更清晰,更便携的方式来实现它.

    2023-02-08 13:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有