C++中char变量赋值129输出-127的原理探究
为什么char类型变量赋值129后输出-127?
先看你的代码:
#include <bits/stdc++.h> using namespace std; int main(){ char a = 129; printf("%d", a); }
输出结果:-127
原因核心在于char类型的默认符号属性和8位整数的溢出规则:
- 绝大多数编译器里,
char默认是有符号8位整数(等价于signed char),取值范围是-128到127。 - 129超出了这个范围,赋值时会发生溢出截断——只保留低8位二进制。129的8位二进制是
10000001。 - 对于有符号整数,最高位是符号位(
1代表负数),剩余位存储补码。要得到实际数值,需将补码转原码:对10000001取反得到01111110,加1后是01111111(十进制127),加上符号就是-127。
如果编译器把char设为无符号类型(unsigned char),输出会是129,但这不是主流默认设置。
内容的提问来源于stack exchange,提问作者gameplayer47
相关产品推荐
相关产品推荐

