我都不好意思来提这个问题,但为了弄明白,还是请大家帮帮我吧-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

我都不好意思来提这个问题,但为了弄明白,还是请大家帮帮我吧

2016-07-27 11:24:36 1646 1

今天在看一本objective-c的教程,里面第6章讲到关于整数。
里面有一段话,摘抄如下:

通常会用第3章介绍过的带描述性的类型来声明整数。

char a;//8
short b;//通常是16位(视平台而定)
int c;//通常是32位(视平台而定)
long d;//32位或64位(视平台而定)
long long e;//64位
然后,我看到了后面的一段示例代码:

#include <stdio.h>
int main (int argc, const char * argv[])
{
    int x = 255;
    printf("x is %d.\n", x);
    return 0;
}
输出结果为:
x is 255.

但,我突发奇想,想试验一下其他的整数声明,我就把int x = 254改成了char x = 254
结果,输出结果为:
x is -2.

这个结果太出乎我意外了(新人,但皮厚,可随便取笑。),char不是8位么?应该可以保存
0-255之间的整数啊,为什么等于254,输出为-2(还蛮有规律的,如果是255,就是-1)了啊?
或者说,我的理解一直有误,虽然8位的无符号整数可保存0-255之间的整数,但这个保存0-255之间的整数,并不是我现在认为的可以char x = 254?

精壮的大神们,请帮帮我吧,虽然对你们来讲是常识问题,但我扒拉了好久google也没有弄明白啊,倒是越来越糊涂,我还找了本C的教程来看整数这一段,也是没明白。

精壮的大神们,来吧~

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 20:00:27

    8位的unsigned 范围是0~255
    8位的signed 范围是-128~127

    那么怎么表示负数呢? 我们希望unsigned能用和signed一样的规则做加减法。所以负数的表示满足-x = ~x + 1这个公式(~x表示x取补),也就是8位的情况下 0xFF 表示 -1 ,0xFE表示-2,254也就是0xFE

    想想看在8位的情况下

    254 + 2 == 0; //溢出
    -2 + 2 == 0;
    signed和unsigned用的加减法实现是一致的

    写到这里想起来了,C好像是%d => signed %ud之类 => unsigned 来着?

    0 0
相关问答

1

回答

dataworks中这个测试连通性通过了,实例id和主账户id等都检查过了但连通状态还是不同为什么?

2022-08-29 17:26:36 191浏览量 回答数 1

1

回答

表都在这里,为什么还提示我 没有这个关系啊?

2022-06-30 15:25:31 406浏览量 回答数 1

1

回答

第三级缓存中为什么要添加ObjectFactory对象,直接保存实例对象不行吗?

2021-10-25 21:47:15 105浏览量 回答数 1

3

回答

个人网站备案该注意那些问题

2017-03-15 18:44:32 3290浏览量 回答数 3

3

回答

帮我看下备案ID3148949 这个备案一直未提交省通信管理局啊。

2016-10-07 13:58:06 3955浏览量 回答数 3

1

回答

我之前欠费被关网了

2016-09-03 16:15:12 1307浏览量 回答数 1

2

回答

备案问题,提示我没有ip无法备案

2015-04-17 22:27:14 4444浏览量 回答数 2

2

回答

如何添加备案主体信息?

2015-01-01 08:41:22 5819浏览量 回答数 2

2

回答

请补偿备案时间

2014-11-14 08:59:29 4397浏览量 回答数 2

3

回答

第三次折腾备案,等待版主解救

2012-08-28 20:20:33 8331浏览量 回答数 3
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Go语言路上踩过的坑
立即下载
用面试官的思维写简历
立即下载
这些软技能,让程序员更幸福
立即下载