标题: c语言基础 编程 [打印本页]

作者: xuelanga000    时间: 2016-7-1 08:57
标题: c语言基础 编程
本帖最后由 xuelanga000 于 2016-7-1 09:02 编辑

各位大神,大家好!
        小弟在编写程序时,发现 负数在计算机中是以补码的形式存储的,最高位是符号位
于是小弟采用-25实验了一下,其中-25的原码二进制是1000 0000 0000 0000 0000 0000 0001 1001
-25的补码是1111 1111 1111 1111 1111 1111 1110 0111

int main( )
{
     int a=0,b=0;
    b=0xffffffffe7;//-25的补码
    a=0x8000019;//-25的原码
    printf("a=%d\n",a);
    printf("b=%d\n",b);
    getch();
    return 0;
}
为什么a=134217753而不是25;为什么b=-25,请各位大神帮我解答一下更多




作者: 1058098234    时间: 2016-7-2 13:40
不懂哦
作者: 1454856609    时间: 2016-7-2 16:30
不懂啊

作者: yzwzfyz    时间: 2016-7-2 20:22
你考虑一下,如果就是134217753,将是如果存储呢?
作者: yzwzfyz    时间: 2016-7-2 20:29
提示一下:用一个字节表示数:
1、00000000B-11111111B=0-255
2、00000000B-11111111B=0至127;-128至-1。

作者: yzwzfyz    时间: 2016-7-2 20:30
你需要告诉编译器,首位是不是作为符号用!
作者: yzwzfyz    时间: 2016-7-2 20:35
例如单字节:
1、00000000B-11111111B=0至256
2、00000000B-11111111B=0至127;-128至-1。
作者: xuelanga000    时间: 2016-7-3 10:50
亲们,怎样告诉编译器首位不是符号位
作者: zl2168    时间: 2016-7-3 12:02
在51单片机中采用int和long数据类型(除非必要)都是半外行教材和半外行老师惹的祸。
作者: SHE音    时间: 2016-7-4 19:17
00000000B-11111111B=0至256
作者: 你不是我qq    时间: 2016-7-5 19:27
不对啊,数据就错了,-25的原码是最高位不应该是1啊,而应该是0.
作者: haizimajia    时间: 2016-7-6 21:38
不懂啊
作者: 隨颩洏過    时间: 2016-7-6 23:02
你是用的单片机?机器不是这么算的吧!
作者: songdaxuan    时间: 2016-7-14 22:07
0x前缀表示的是十六进制
你要表示二进制后缀用B
作者: 海葵鱼    时间: 2016-7-15 15:48
不懂啊
作者: bbright3493    时间: 2016-7-17 15:18
数据在内存里面都是以补码的形式存储的  补码的话要考虑符号位




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1