C语言之取反和取相反数 您所在的位置:网站首页 求一个数的反函数的值 C语言之取反和取相反数

C语言之取反和取相反数

2024-06-21 14:42| 来源: 网络整理| 查看: 265

取反(~) 属于按位逻辑运算符,属于一元运算符,其本质其实就是将数据每一位按位取反,即将0变成1,将1变成0; 1、 简单代码做一下测试: char val = 2; char test = 0; unsigned 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; unsigned char unval1 = 2; unsigned 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、简单结果分析一: 因为是一元运算符,对其取相反数现在也不太明白具体是如何实现的,只说说我的理解,简单粗暴,可能不对,但对大多数情况都适用 在负号前面加0,进行减法运算(0-数据补码) 如val = -2 原码:1000 0010 反码:1111 1101 补码:1111 1110 求相反数,-val = 2 即0000 0000 - 1111 1110 = 0000 0010 (等于2)

如test =-128 补码:1000 0000 求相反数 -test = -128 即0000 0000 - 1000 0000 = 1000 0000 (等于-128) 后面的数据转换与上述分析类似;

4、简单结果分析二 相反数直接关于环形对称。同样其他的数据类型也是同样的性质,只是数据范围变大了。简单粗暴! 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有