找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4118|回复: 15
打印 上一主题 下一主题
收起左侧

c语言基础 编程

  [复制链接]
跳转到指定楼层
楼主
ID:106476 发表于 2016-7-1 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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,请各位大神帮我解答一下更多



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:128414 发表于 2016-7-2 13:40 | 只看该作者
不懂哦
回复

使用道具 举报

板凳
ID:128930 发表于 2016-7-2 16:30 | 只看该作者
不懂啊
回复

使用道具 举报

地板
ID:123289 发表于 2016-7-2 20:22 | 只看该作者
你考虑一下,如果就是134217753,将是如果存储呢?
回复

使用道具 举报

5#
ID:123289 发表于 2016-7-2 20:29 | 只看该作者
提示一下:用一个字节表示数:
1、00000000B-11111111B=0-255
2、00000000B-11111111B=0至127;-128至-1。
回复

使用道具 举报

6#
ID:123289 发表于 2016-7-2 20:30 | 只看该作者
你需要告诉编译器,首位是不是作为符号用!
回复

使用道具 举报

7#
ID:123289 发表于 2016-7-2 20:35 | 只看该作者
例如单字节:
1、00000000B-11111111B=0至256
2、00000000B-11111111B=0至127;-128至-1。
回复

使用道具 举报

8#
ID:106476 发表于 2016-7-3 10:50 | 只看该作者
亲们,怎样告诉编译器首位不是符号位
回复

使用道具 举报

9#
ID:111634 发表于 2016-7-3 12:02 | 只看该作者
在51单片机中采用int和long数据类型(除非必要)都是半外行教材和半外行老师惹的祸。
回复

使用道具 举报

10#
ID:129208 发表于 2016-7-4 19:17 | 只看该作者
00000000B-11111111B=0至256
回复

使用道具 举报

11#
ID:129345 发表于 2016-7-5 19:27 来自触屏版 | 只看该作者
不对啊,数据就错了,-25的原码是最高位不应该是1啊,而应该是0.
回复

使用道具 举报

12#
ID:129484 发表于 2016-7-6 21:38 | 只看该作者
不懂啊
回复

使用道具 举报

13#
ID:129494 发表于 2016-7-6 23:02 | 只看该作者
你是用的单片机?机器不是这么算的吧!
回复

使用道具 举报

14#
ID:122633 发表于 2016-7-14 22:07 | 只看该作者
0x前缀表示的是十六进制
你要表示二进制后缀用B
回复

使用道具 举报

15#
ID:130573 发表于 2016-7-15 15:48 | 只看该作者
不懂啊
回复

使用道具 举报

16#
ID:130800 发表于 2016-7-17 15:18 | 只看该作者
数据在内存里面都是以补码的形式存储的  补码的话要考虑符号位
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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