鱼C论坛

 找回密码
 立即注册
查看: 2479|回复: 6

[已解决]设一个字符型变量i,赋值为255然后在printf中用%d打印出来,结果为啥是-1?

[复制链接]
发表于 2020-2-17 12:06:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
《带你学C带你飞》S1E7   取值范围
编译器是Dev-C++
设一个字符型变量i(char i),赋值255(i = 255),然后在printf中用%d打印出来,为啥结果是-1
代码如下,求解答


                               
登录/注册后可看大图

#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 13:09:18
char的取值范围是 -128-127,255显然溢出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-17 15:56:15 | 显示全部楼层
本帖最后由 转会但姿势丶 于 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。
希望对你们有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 13:05:28 | 显示全部楼层
这段代码真的可以运行吗?i = 255是能编译的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 13:09:18 | 显示全部楼层    本楼为最佳答案   
char的取值范围是 -128-127,255显然溢出了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 13:37:28 | 显示全部楼层
超出了 char 能表示的范围,可以试试 unsigned char
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-17 15:11:52 | 显示全部楼层
chxchxkkk 发表于 2020-2-17 13:09
char的取值范围是 -128-127,255显然溢出了

只要溢出了,最后的值都会是-1吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-17 15:31:25 | 显示全部楼层
转会但姿势丶 发表于 2020-2-17 15:11
只要溢出了,最后的值都会是-1吗?

QQ截图20200217152536.png
因为我感觉正常的编译的话编译器会报错
我通过OD,简单修改下,将char i=254,返回的结果是-2,

具体原则
请参考百度知道:https://zhidao.baidu.com/question/100046409.html
或许会有启发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表