有无符号的整数、二进制

无符号的整数

以原码的形式存在于内存中,假如此整数占1个字节(为了简化),从小到大为0-256,对应二进制为0000 0000 -- 1111 1111。

有符号的整数

正数以原码的形式存在于内存中,负数以补码的形式存在于内存中,正数从1-127,对应二进制为0000 0001--0111 1111;负数从小到大为-128到-1,1000 0000--1111 1111。
这样做的原因是为了,1.避免了出现正0和负0这两个相等的数字。2.可以将减法转换成加法处理。1-1 0000 0001 + 1111 1111 = 0000 0000溢出位不管。

忘了它的类型

看看如何不通过中间变量去交换两个变量的值我们不用去理会内存中的是什么类型的数据,仅仅是将内存中的二进制做一个交换。
a:1011 0010和b:0111 1100
a与b每位都做异或操作 a = a ^ b;a:1100 1110
a与b每位都做异或操作 b = a ^ b;b:0111 1100
a与b每位都做异或操作 a = a ^ b;a:1011 0010
这样就完成了交换,不管是什么类型的值,不用理会它是什么类型的值,这样都可以交换块相同大小的内存块的值。有时候有了我们赋予它类型太久了,忘了它仅仅是1010……了。
通过这种方式也可以实现一个简单的对称加密。

write by fgd << "如有转载请注明出处cnblogs.com/wendao"

原文地址:https://www.cnblogs.com/wendao/p/2630939.html