| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1802 人关注过本帖
标题:请各位前辈指点刚刚入学的
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
这里以+5和-5做例子

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 15:50
启新
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-7-12
收藏
得分:0 
回复 8楼 sunyh1999
我想知道,如果这个里面的getchar()去掉后,会影响吗?简单点,就是getcgar()的功能
2010-07-12 16:07
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 12楼 启新
当然有影响,getchar的功能就是让用户从键盘上输入一个字符呀

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:08
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
你可以试试看,不过用scanf(“%c”,&x);也可以的,x是指输入的

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:09
启新
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-7-12
收藏
得分:0 
回复 10楼 sunyh1999
不是证号是0,负号是1吗?
2010-07-12 16:10
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
正号0,负是1

[ 本帖最后由 sunyh1999 于 2010-7-12 16:18 编辑 ]

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:11
启新
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:11
专家分:0
注 册:2010-7-12
收藏
得分:0 
回复 16楼 sunyh1999
我一开始 也是你这么想的,可是我看过一些帖子,正0负1
你那句“当然有影影响”叫我很纠结啊,我也不知道什么时候该用,什么时候不该用!
2010-07-12 16:14
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
这个不必讲究,你喜欢用scanf就用scanf,你喜欢用getchar就用getchar

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:15
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
再解释一下:
计算机中的数值的表示法,通常有以下几种:原码、反码和补码,还有一种叫符号数值表示法(sign and magnitute),不常用。

原码,最高位为符号位,其它位为值位,符号位为1表示负数。例如-1的原码表示为(假设八位表示)10000001,1为00000001。

反码,最高位为符号位,但值位为原码取反,反码其实叫1的补码,-1的反码表示就是11111110。反码存在正0与负0,不太“合理”。在C语言里,负0的反码表示11111111如果不作为正常值,就是一个陷阱表示,作为正常值时就表示负0。

补码,最高位为符号位,但值位为原码取反加1,补码叫2的补码,-1的补码为11111111。补码没有正0与负0之分。在补码中,10000000作为正常值时为-128,不作为正常值时为陷阱表示。

在算术运算里,有一种叫求补的运算,例如汇编里面的neg指令,这种求补运算是将取反加一作为一种运算去运行,与通常所说的将一个数的原码转换为补码是不同的,这是初学者容易搞错的地方。求补运算不考虑符号位,也将符号位作为值位一同运算,它强调的是取反加一这样一个过程,在2的补码系统里,对一个数值进行求补运算结果是其相反数,例如对-1的补码11111111进行求补结果为00000001,变成正1。

有一个方法可以快速进行求补运算,从右边数起,直到第一个1(包括其自身)之间的位值不变,其余位求反就是结果。例如对11011100求补,最右边的100不变,其余位取反结果就是00100100。


欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:16
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
若还不懂,这个很详细了:
数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.

数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为

(-127~-0 +0~127)共256个.

  有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits

( 1 ) 10-  ( 1 )10 =  ( 1 )10 + ( -1 )10 =  ( 0 )10

(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.

  因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:

 ( 1 )10 -  ( 1 ) 10=  ( 1 ) 10+ ( -1 ) 10=  ( 0 )10

 (00000001) 反+ (11111110)反 =  (11111111)反 =  ( -0 )  有问题.

( 1 )10 -  ( 2)10 =  ( 1 )10 + ( -2 )10 =  ( -1 )10

(00000001) 反+ (11111101)反 =  (11111110)反 =  ( -1 ) 正确

问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:

(-128~0~127)共256个.

注意:(-128)没有相对应的原码和反码, (-128) = (10000000)  补码的加减运算如下:

( 1 ) 10-  ( 1 ) 10=  ( 1 )10 + ( -1 )10 =  ( 0 )10

(00000001)补 + (11111111)补 =  (00000000)补 = ( 0 ) 正确

( 1 ) 10-  ( 2) 10=  ( 1 )10 + ( -2 )10 =  ( -1 )10

(00000001) 补+ (11111110) 补=  (11111111)补 = ( -1 )  正确

   所以补码的设计目的是:

     ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.

⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

  所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。看了上面这些大家应该对原码、反码、补码有了新的认识了吧!

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-12 16:17
快速回复:请各位前辈指点刚刚入学的
数据加载中...
 
   



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

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