黑马程序员技术交流社区

标题: +128在内存当中到底是怎么表示的, [打印本页]

作者: MuziTian    时间: 2016-3-25 23:04
标题: +128在内存当中到底是怎么表示的,
#include<stdio.h>

int main()
{
    int a = 128;
    printf("%p %p\n", &a,);

    char * xx = (char*)&a;
    printf("%p\n", xx);

    printf("0 -> %p --> %d\n", xx, *xx);
    printf("0 -> %p --> %d\n", xx+1, *(xx+1));
    printf("0 -> %p --> %d\n", xx+2, *(xx+2));
    printf("0 -> %p --> %d\n", xx+3, *(xx+3));
}

为什么内存最低位输出的是      -128。


作者: iOSyinlixian    时间: 2016-3-25 23:46
不是太懂
作者: MuziTian    时间: 2016-3-25 23:51
如题在内存当中只有一个字节,存贮的是10000000,那么他到底表示多少呢,如果表示-128,那么正的128又怎么表示
作者: 最爱舒儿    时间: 2016-3-26 00:31
这个是指针么                    !
作者: MuziTian    时间: 2016-3-26 19:04
是的!想验证一下内存中存的东西
作者: 堕落天使    时间: 2016-3-27 08:20
一个字节存储的范围就是-128~+127,要表示+128就需要两个字节,为什么是-128,这是一个规定,详细的可以看C语言入门视频中,原码,反码,补码部分的视频!
希望会对你有帮助。
作者: muzipiao    时间: 2016-3-27 10:24
有符号数用补码表示,一个字节不能表示+128,最大为+127,取值范围为-128至正+127
0:0000 0000
正数补码为自己:首位为0,后七位二进制数即为所表示正数的绝对值
负数补码:首位为1,将所有位取反,再加1,即为负数的绝对值
1000 0000按照上边的说法应该为负数(首位为1),取反加1结果还是1000 0000,大小为128
所以1000 0000也就表示了-128
作者: MuziTian    时间: 2016-3-27 15:52
堕落天使 发表于 2016-3-27 08:20
一个字节存储的范围就是-128~+127,要表示+128就需要两个字节,为什么是-128,这是一个规定,详细的可以看C ...

已经看过了,但是里面没有讲到,这种极限,或者是边界的问题,所以脑袋大,想不清楚
作者: 堕落天使    时间: 2016-3-27 21:54
muzipiao 发表于 2016-3-27 10:24
有符号数用补码表示,一个字节不能表示+128,最大为+127,取值范围为-128至正+127
0:0000 0000
正数补码为 ...

-128没有原码,只有补码的。
作者: 堕落天使    时间: 2016-3-27 21:55
MuziTian 发表于 2016-3-27 15:52
已经看过了,但是里面没有讲到,这种极限,或者是边界的问题,所以脑袋大,想不清楚 ...

不对吧,视频里有讲过的啊,0和-0的问题,就是这里牵扯到-128的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2