0%

Leetcode627 Swap salary

Problem:

Intuition:

两个相等的数异或的结果为 0,而 0 与任何一个数异或的结果为这个数。

注意抑或操作是同时满足交换律和结合率的,所以顺序可以随便换。

sex 字段只有两个取值:’f’ 和 ‘m’,并且有以下规律:

‘f’ ^ (‘m’ ^ ‘f’) = ‘m’ ^ (‘f’ ^ ‘f’) = ‘m’
‘m’ ^ (‘m’ ^ ‘f’) = ‘f’ ^ (‘m’ ^ ‘m’) = ‘f’
因此将 sex 字段和 ‘m’ ^ ‘f’ 进行异或操作,最后就能反转 sex 字段。

Solution:

1
2
UPDATE salary
SET sex = CHAR ( ASCII(sex) ^ ASCII( 'm' ) ^ ASCII( 'f' ) );