位运算与符号运算解析

分类: be365体育平台app 发布时间: 2025-07-09 05:40:50 作者: admin

取反(~)

属于按位逻辑运算符,属于一元运算符,其本质其实就是将数据每一位按位取反,即将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、简单结果分析二

相反数直接关于环形对称。同样其他的数据类型也是同样的性质,只是数据范围变大了。简单粗暴!

上一篇: 互联移动导航仪排行榜 下一篇: 菲律宾三大电信运营商服务PK

相关文章

把腿拉长的p图软件 哪个修图软件可以拉长腿

把腿拉长的p图软件 哪个修图软件可以拉长腿

神武70剧情攻略(神武70剧情怎么打)

神武70剧情攻略(神武70剧情怎么打)

讓子 (圍棋)

讓子 (圍棋)

农商银行atm转账多久到账

农商银行atm转账多久到账

详单查询

详单查询

魔兽世界永冻冰晶怎么获得

魔兽世界永冻冰晶怎么获得