二进制有、无字符数字 结合 golang ^ 运算符

有无符号的整数,在计算机内存中是区别不出有无符号的,而是在程序里有区分。计算机中数据是以补码形式存放的,用二进制表示。比如:默认无符号型,只要在类型符号加unsigned就是无符号型,Int是有符号的。其实说白了就是:定义带符号整数的,则可以存储正负整数,定义无符号整数的,则只可以存储正整数。

有符号的使用二进制第一位标识是正数还是负数

所有运算符

1、算术运算符

  • 相加
  • 相减
  • 相乘
    / 相除
    % 求余
    ++ 自增
    -- 自减

2、关系运算符

== 等于
!= 不等于

大于
< 小于
= 大于等于
<= 小于等于

3、位运算符

& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或。
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
<< 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。

右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。

4、逻辑运算符

&& 与
|| 或
!(感叹号) 非

5、赋值运算符

+= (C += A 等于 C = C + A)
-= (C -= A 等于 C = C - A)
*= (C *= A 等于 C = C * A)
/= (C /= A 等于 C = C / A)
%= (C %= A 等于 C = C % A)

6、运算符优先级

go语言中的运算符^,&

1、作为二元运算符

^作二元运算符就是异或,包括符号位在内,相同为0,不相同为1

规则:1^1 =0, 00=0,10=1,0^1=1

事例:

(1)0001 0100 ^ 0000 1111 = 0001 1011 故 20 ^ 15 =27

(2)0000 0001^ 1111 1101=1111 1100 故1^(-3)=-4,参与运算的是-3的补码

2、作为一元运算符

^作一元运算符表示是按位取反,包括符号位在内

规则:1=0,0=1

(1)事例:

func main() { var i uint8 = 20 fmt.Println(i,20) } // 输出结果是:235 -21

其实原因很简单,一个是有符号的数一个是无符号的数^0001 0100 = 1110 1011 为无符号数,则结果为235;结果为有符号数,则为负数补码

(2)^1111 1101=0000 0010 即 ^(-3)=2,参与运算的是-3的补码

所以,一个有符号位的^操作为 这个数+1的相反数

3、总结

对于有符号数而言,参与运算过程中,正数不变,负数需要转换成补码参与运算,得到的结果若为负数则为补码

二、 &^运算符

作用:将运算符左边数据相异的位保留,相同位清零

规则:

1&^1 得0 1&^0 得1 0&^1 得0 0&^0 得0

事例:

0001 0100 &^ 0000 1111 = 0001 0000 结果为16

参考链接:
https://www.cnblogs.com/smallleiit/p/10374052.html
https://blog.csdn.net/whatday/article/details/103953281

posted @ 2022-02-11 14:58  董大轩  阅读(312)  评论(0编辑  收藏  举报