#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
char c = 128;
printf("%d\n", c);
system("pause");
return 0;
}
结果:-128
我想问的是:一个字节的char表示的范围应该是-128 ~ 127,但是128超出了char的表示范围,这时候我觉得应该是1 0000 0000 啊,如果输出c的话,去掉最高位,剩下的应该是0啊,为什么输出的是-128呢?
12 个解决方案
#1
char c = 128; 这个其实在计算机内部存储的时候地址&c的位置存储的形式就是: 1000 0000
printf("%d\n", c); 当你用pintf打印出来的时候,你的格式是”%d“,因此在printf运行时,其对数据1000 0000的解析就是按照%d来解析的,所以会是128
printf("%d\n", c); 当你用pintf打印出来的时候,你的格式是”%d“,因此在printf运行时,其对数据1000 0000的解析就是按照%d来解析的,所以会是128
#2
补充一下,”其对数据1000 0000的解析就是按照%d来解析的,所以会是128“ 这里有个笔误, 结果应该是-128. 1000 0000 是-128的补码
#3
char c = 128;
常数默认为int型。
128int型补码为0x80;
强制转为为char型,0x80作为补码,在char型中,就是-128;
常数默认为int型。
128int型补码为0x80;
强制转为为char型,0x80作为补码,在char型中,就是-128;
#4
作为int型,128是正数,补码和原码一样,都是 0000 0000 0000 0000 0000 0000 1000 0000;
赋给char型,自动截取,变为 1000 0000;
作为char型的补码,1000 0000就是-128.。。。
赋给char型,自动截取,变为 1000 0000;
作为char型的补码,1000 0000就是-128.。。。
#5
baidu或者google一下补码就清楚了
#6
看清楚了,是-128哦,不是128哦。
#7
char c = 128;
int d = c;
printf("%d\n", c);
设断点,看看 c, d 的值
google 带符号位扩展
#8
一个字节8位,计算机存储的都是补码
128的补码是0 1000 0000,因为char只能存储8位,去掉最高位
变成1000 0000,1000 0000再作为char的补码,还原成原码,就是-128了
128的补码是0 1000 0000,因为char只能存储8位,去掉最高位
变成1000 0000,1000 0000再作为char的补码,还原成原码,就是-128了
#9
++
#10
丹姐,你看:
显示c,d都是等于-128的,都不知道怎么分析了。
#11
1、char类型的128就是-128;
2、扩展为int类型,会扩展符号位至ffffff80,值仍然是-128;
3、unsigned char的128才是真正的128;
4、%c打印的字符(表现为看不懂的符号),%d打印的是-128。
2、扩展为int类型,会扩展符号位至ffffff80,值仍然是-128;
3、unsigned char的128才是真正的128;
4、%c打印的字符(表现为看不懂的符号),%d打印的是-128。
#12
用 hex 格式显示
#1
char c = 128; 这个其实在计算机内部存储的时候地址&c的位置存储的形式就是: 1000 0000
printf("%d\n", c); 当你用pintf打印出来的时候,你的格式是”%d“,因此在printf运行时,其对数据1000 0000的解析就是按照%d来解析的,所以会是128
printf("%d\n", c); 当你用pintf打印出来的时候,你的格式是”%d“,因此在printf运行时,其对数据1000 0000的解析就是按照%d来解析的,所以会是128
#2
补充一下,”其对数据1000 0000的解析就是按照%d来解析的,所以会是128“ 这里有个笔误, 结果应该是-128. 1000 0000 是-128的补码
#3
char c = 128;
常数默认为int型。
128int型补码为0x80;
强制转为为char型,0x80作为补码,在char型中,就是-128;
常数默认为int型。
128int型补码为0x80;
强制转为为char型,0x80作为补码,在char型中,就是-128;
#4
作为int型,128是正数,补码和原码一样,都是 0000 0000 0000 0000 0000 0000 1000 0000;
赋给char型,自动截取,变为 1000 0000;
作为char型的补码,1000 0000就是-128.。。。
赋给char型,自动截取,变为 1000 0000;
作为char型的补码,1000 0000就是-128.。。。
#5
baidu或者google一下补码就清楚了
#6
看清楚了,是-128哦,不是128哦。
#7
char c = 128;
int d = c;
printf("%d\n", c);
设断点,看看 c, d 的值
google 带符号位扩展
#8
一个字节8位,计算机存储的都是补码
128的补码是0 1000 0000,因为char只能存储8位,去掉最高位
变成1000 0000,1000 0000再作为char的补码,还原成原码,就是-128了
128的补码是0 1000 0000,因为char只能存储8位,去掉最高位
变成1000 0000,1000 0000再作为char的补码,还原成原码,就是-128了
#9
++
#10
丹姐,你看:
显示c,d都是等于-128的,都不知道怎么分析了。
#11
1、char类型的128就是-128;
2、扩展为int类型,会扩展符号位至ffffff80,值仍然是-128;
3、unsigned char的128才是真正的128;
4、%c打印的字符(表现为看不懂的符号),%d打印的是-128。
2、扩展为int类型,会扩展符号位至ffffff80,值仍然是-128;
3、unsigned char的128才是真正的128;
4、%c打印的字符(表现为看不懂的符号),%d打印的是-128。
#12
用 hex 格式显示