欢迎光临
我们一直在努力

c语言中怎么补0,c语言输出的是原码还是补码

该楼层疑似违规已被系统折叠?隐藏此楼查看此楼

我们都知道,数值在内存里都是以补码形式存储的。正数的原反补都一样,负数的补码等于原码的反码加1.但对于0来说,它有符号位吗? ??? 以一个8位的系统来说,有符号数的二进制为(1000 0000),表示的是-0,还是-128呢??? 看看负数补码的公式:负数的补码=1 0000 0000(模)- 数的绝对值 ???? 比如:-1: 1111 1111 =1 0000 0000 – 0000 0001 ??? -2: 1111 1110 =1 0000 0000 – 0000 0010?? 假设1:表示-0。?? 那么 -0的补码: 1 0000 0000 – 0 =0000 0000??? 反码: 1111 1111?? (0000 0000 -1 = 0000 0000 +1111 1111=1111 1111)??? 原码: 1000 0000(反码取反)

假设2:表示-128。?? -128的补码: 1 0000 0000 – 1000 0000(+128没有符号位)= 1000 0000?? 反码: 1111 1111?? (1000 0000 -1 =1 000 0000 + 1111 1111 = 1111 1111)(补码-1)?? 原码: 1000 0000(反码取反)

从上面看来,一个原码对应了2个补码。按照C语言的定义,在32位的系统里,int表示的范围为-2^31 ~ +(2^31-1),那么美国高防vps可以推论出有符号数可以表示负的最大值,而没有-0的定义。也就是说上面1000 0000 表示的应该是-128,而不是-0。?? 对于一般的程序来说,+0和-0是没有区别的。但在高等数学里,+0和-0应该是有区别,表述不同的意义。如果在一些运算求解高等数学的程序里,没有-0会带来bug吗?

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。