首页 > 编程语言 > 详细

C语言中的正负数及其输出

时间:2019-04-10 17:47:01      阅读:241      评论:0      收藏:0      [点我收藏+]

1、符号也是数字的一部分,也要在内存中体现出来。符号只是正负两种情况,用一位(Bit)就足以表示;C语言中规定,把内存的最高位作为符号位

 

2、C语言中规定,在符号位中,用0表示正数、用1表示负数

 

3、C语言允许我们这样做,如果不希望设置符号位,可以在数据类型前面加上unsigned关键字,

例如:unsigned int b=1002;或 unsigned b=1002;

  这样,short、int、long中就没有符号位了,所有的位都用来表示数值,正数的取值范围更大了,这也意味着,使用了unsigned后只能表示正数,不能在表示负数了!加了unsigned的数字称为无符号数未加的数字称为有符号数

  printf不支持以八进制(%0)和十六进制(%x)形式输出有符号数,只有十进制用%d来表示有符号数。用%u来表示无符号数。

4、工作原则:

  1)当以有符号数的形式输出时,printf会读取数字所占的内存,并把最高位作为符号位,把剩下的内存作为数值位。

  2)当以无符号数的形式输出时,printf也会读取数字所占的内存,并把所有内存都作为数值位对待。

对于一个有符号的正数,它的符号位是0;当按照无符号数的形式读取时,符号位就变成了数值位,但该位恰巧是0而不是1;所以对数值不会产生影响,这就好比在一个数字前面加0,有多少个0都不会影响数字的值。

可以说,“有符号的正数的最高位是0”这个巧合才使得%0和%x输出有符号数时才不会出错!

5、注意:虽然部分编译器支持二进制数字的表示,但是却不能使用printf函数输出二进制,这一点比较遗憾!

  若要使输出的八进制或十六进制的前缀也输出,则要在%前加上 # 号。例如:%#0、%#x

 

C语言中的正负数及其输出

原文:https://www.cnblogs.com/YuanBo-China/p/10684852.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!