设一个字符型变量i,赋值为255然后在printf中用%d打印出来,结果为啥是-1?
《带你学C带你飞》S1E7 取值范围编译器是Dev-C++
设一个字符型变量i(char i),赋值255(i = 255),然后在printf中用%d打印出来,为啥结果是-1
代码如下,求解答
static/image/hrline/line7.png
#include <stdio.h>
int main()
{
char i;
int j;
i = 255;
j = 255;
printf("i的值是:%d\n", i);
printf("j的值是:%d\n", j);
return 0;
} 本帖最后由 转会但姿势丶 于 2020-2-17 16:05 编辑
4goodworld 发表于 2020-2-17 15:31
因为我感觉正常的编译的话编译器会报错
我通过OD,简单修改下,将char i=254,返回的结果是-2,
我现在已经理解了,char的取值范围在-128~127之间,只要“i”的值在256之内,编译器都会把它转换为二进制,但当第一个字符位为“1”时,该二进制为负数,编辑器就会把除了第一个字符位以外的其它字符位上的“1”变为“0”、“0”变为“1”。
如:255的二进制是1 1 1 1 1 1 1 1,除第一个字符位以外,其它字符位上的“1”变为“0”、“0”变为“1”,所以
1 1 1 1 1 1 1 1就变为1 0 0 0 0 0 0 0,而1 0 0 0 0 0 0 0等于十进制上的-1。
希望对你们有所帮助! 这段代码真的可以运行吗?i = 255是能编译的吗?
char的取值范围是 -128-127,255显然溢出了 超出了 char 能表示的范围,可以试试 unsigned char chxchxkkk 发表于 2020-2-17 13:09
char的取值范围是 -128-127,255显然溢出了
只要溢出了,最后的值都会是-1吗? 转会但姿势丶 发表于 2020-2-17 15:11
只要溢出了,最后的值都会是-1吗?
因为我感觉正常的编译的话编译器会报错
我通过OD,简单修改下,将char i=254,返回的结果是-2,
具体原则
请参考百度知道:https://zhidao.baidu.com/question/100046409.html
或许会有启发
页:
[1]