编程中如何取相反数,c语言取反

取反(~)

是逐比特的逻辑运算符,是一元运算符,其本质是以比特为单位使数据的各位反转,即使0为1、1为0;

1、用简单代码测试一下: char val=2; char test=0; 无符号char unval=0; test=~val; unval=~val; printf(val5=%d(n ),test ); printf(val5=%d\n )、unval ); 2、结果如下。

3、简要分析:

变量val的值为2,作为补数存在于计算机内部

原代码: 0000 0010

反码: 0000 0010

补数: 0000 0010

~将val反过来(将补数反过来) )。

补数: 1111 1101

反码: 1111 1100

原码: 1000 0011=-3

因此,如果将char val反过来代入char test,则其值为-3;

但是,将其相反代入unsigned char unval时,涉及从同种带符号到无符号的变换,值为-3 28=253;

– 取相反数 (-)

此时的“-”作为符号运算符属于一元运算符,

1、简单代码测试:

//An highlighted block char val=-2; char test=-128; 无符号char unval1=2; 无符号char unval2=128; val=-val; test=-test; unval1=-unval1; unval2=-unval2; printf(-val=%d\n )、val ); printf(‘-test=%d\n ‘,test ); printf(‘-unval1=%d\n ‘,unval1); printf(‘-unval1=%d\n ‘,unval2); 2、结果如下。

3、简要结果分析1 :

因为是一元运算符,所以对它取相反数现在也不太清楚具体是怎么实现的。 我只说我的理解。 简单粗暴,可能是错误的,但大多数情况都适用

在负号之前加0,进行减法运算(0-数据补充) )

例如val=-2

原代码: 1000 0010

反码: 1111 1101

补数: 1111 1110

求相反数,-val=2

也就是说,00000000-11111110=00000010(2)

例如test=-128

补数: 1000 0000

求相反数-test=-128

即,0000 0000 – 1000 0000=1000 0000 (等于-128 ) )。

之后的数据转换与上述分析类似;

4、简要结果分析2

相反数直接关于环对称。 其他数据类型也具有相同的性质,但数据范围更广。 简单粗暴!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注