C语⾔中的正负数及其输出以及⼩数
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
6、⼩数的输出:
%e以指数形式输出float类型,输出结果中的e⼩写。
%le以指数形式输出double类型,输出结果中的e⼩写。
1)%g默认最多保留六位有效数字,包括整数部分和⼩数部分;%f和%e默认保留六位⼩数,只包括⼩数部分。
2)%g不会再最后强加0来凑够有效数字的位数,⽽%f和%e会在最后强加0来凑⾜⼩数部分的位数
7、数字的默认类型:对于整数,默认为int类型;对于⼩数,默认是double类型。
1)在整数后⾯紧跟l或者L(不区分⼤⼩写)表明该数字是long类型
2)在⼩数后⾯紧跟f或F表明数字是float类型
8、⼩数和整数之间的相互赋值:
1)将整数赋值给⼩数类型,在⼩数后⾯加0就可以了,加⼏个都⽆所谓哦!
printf直接输出数字 2)将⼩数赋值给整数类型,就得把⼩数部分丢掉,只能取整数部分,这会改变数字本⾝的值。直接丢掉⼩数部分,不是进⾏四舍五⼊!
由于将⼩数赋值给整数类型会“失真”,所以编译器⼀般会给出警告,让⼤家引起注意。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论