| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1987 人关注过本帖
标题:求助求助!!反码 原码 问题。
只看楼主 加入收藏
北冥有鱼:
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2017-10-12
结帖率:45.45%
收藏
 问题点数:0 回复次数:14 
求助求助!!反码 原码 问题。
  脑子感觉快烧没了。。。。
  char i=255;
  printf i=-1
  我是这么想的,计算机先把这个255数字转化为二进制,就是11111111, 然后把这个二进制当补码来看,八位里就是-1啦。
  可是,如果是char i=-1的话,可是-1好像不能化为二进制吧?》所以这个想法有问题。

第二种想法,先把这个数字化为原码,在转化为补码,但是,255在1个字节八位里好像不能化成原码。。。
 有大佬给理一理的吗?
搜索更多相关主题的帖子: char 数字 转化 二进制 补码 
2017-12-08 10:49
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
你这里的 i 是字符,还是数字哦?
2017-12-08 11:46
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 楼主 北冥有鱼:
类似的~

https://bbs.bccn.net/thread-483198-1-1.html

以下是引用天灵灵在2017-12-7 22:31:05的发言:

#include<stdio.h>
int main()
{unsigned int a = -1;
printf("%d\n",a);
return 0;
}


以下是引用renkejun1942在2017-12-7 23:01:17的发言:

因为%d


因为%d + 1

编译器输出%d时相当于二进制的00000000000000000000000011111111相当于十进制的255~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-08 12:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
补充一下

char c=256

占用一个字节的char这样会输出0;

因为c进行取值时只会取前sizeof(char)个字节~


储存和读取其实是两回事~

计算机储存状态是二进制方式的~不过读取形式却可以多样化~

数据储存就好比如一杯水~读取方式(输出格式)好比如各种容器~同一杯水装在不同的容器里面表现出来的效果也是不同的~




[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-08 12:42
北冥有鱼:
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2017-10-12
收藏
得分:0 
回复 4楼 九转星河
那 char a=255  
计算机是怎么 读取 的呢?
char a=-1  又是怎么读取的??/
我觉得 如果a是正数的话,它可以转化为一个二进制数,比如255的纯2进制是11111111,但是计算机是以补码来看的,即11111111 是-1,输出-1.
可是要是负数该怎么考虑这个问题呢?

[此贴子已经被作者于2017-12-8 14:11编辑过]

2017-12-08 14:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 北冥有鱼:
首先看二进制内存里面是什么内容~
char s=255;
这个例子是0x000000ff
char s=-1这个例子是0xffffffff
但是因为s的数据类型是char型,这里占一个字节,
所以储存就是储存前一个字节~
所以都是储存0xff
所以二进制内存储存相同,无论输出格式是什么,相同输出格式结果都是相同的~




[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-08 14:14
北冥有鱼:
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2017-10-12
收藏
得分:0 
回复 6楼 九转星河
大佬我 是萌新 有点头晕。。。。那你觉得我那个想法是对的吗? 就是正数的那个
2017-12-08 14:18
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 北冥有鱼:
计算机二进制里面没有负数~
负数是通过补码体现出来的~
所以这些虽然结果可以确定,
不过怎么理解就见仁见智了~
所以这么抽象的问题能够理解就可以了,不必要过分执着文字的表述,所以到底还是要你好好理解才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-08 14:36
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 北冥有鱼:
程序代码:
#include<stdio.h>

int main( void )
{
    char c=255;
    short h=65535;
    
    printf("%d\n%u\n",c,c);
    printf("%hd\n%d\n%u\n",h,h,h);

    return 0;
}


图片附件: 游客没有浏览图片的权限,请 登录注册


话说,好像这个代码要看看怎么解释才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-12-08 14:44
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
对于整数来说,-1,8bit是0xFF、16bit是0xFFFF、32bit是0xFFFFFFFF
2017-12-08 14:45
快速回复:求助求助!!反码 原码 问题。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020076 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved