标题:求助求助!!反码 原码 问题。
只看楼主
北冥有鱼:
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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
对于整数来说,-1,8bit是0xFF、16bit是0xFFFF、32bit是0xFFFFFFFF
2017-12-08 14:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483203-1-1.html




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

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