赞
踩
1、uchar 类型只能保存0-255的数字。超过了会溢出,溢出后会从0开始继续累加。所以小心使用
uchar u;
u +=u;
溢出了也不会提醒你
2、
计算机CPU只有加法逻辑运算器,对于减法运算,是使用两个数的补码进行加法运算。
- 50-100=?
- 50的二进制是: 00000000|00000000|00000000|00110010
- 50的补码是: 00000000|00000000|00000000|00110010(整数的补码不变)
- 100的二进制是: 00000000|00000000|00000000|0110010
- -100的补码是: 先减1:100的二进制数 - 1
- = 00000000|00000000|00000000|01100011
- 按位取反:00000000|00000000|00000000|01100011
- = 11111111|11111111|11111111|10011100
- (50的补码) + (-100的补码)是:00000000|00000000|00000000|00110010 +
- 11111111|11111111|11111111|10011100
- = 11111111|11111111|11111111|11001110
-
- 如果是无符号数,二进制转十进制:
- 11111111|11111111|11111111|11001110 = 4294967246
- 如果是有符号数,二进制转十进制:
- 11111111|11111111|11111111|11001110首位是1表示负数,
- 先减1:11111111|11111111|11111111|11001101
- 按位取反:00000000|00000000|00000000|00110010
- 有符号数结果: - (1*2^5 + 1*2^4 + 1*2^1)=-50

- 补码:
-
- 正数的补码,是其本身。
-
- 负数的补码,就用它的正数,减一取反,即可得到补码。
-
- 如,已知:+9 补码是:0000 1001。
-
- 下面求-9 补码:
-
- 先减一:0000 1001 - 1 = 0000 1000;
-
- 再取反:1111 0111。
-
- 所以有:-9 补码 = 1111 0111。
3、
50-100=-50, -50的二进制是补码表示为50取反+1,
50: 00000000|00000000|00000000|00110010
取反: 11111111|11111111|11111111|11001101
加1: 11111111|11111111|11111111|11001110 就是无符号数的 4294967246
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。