位运算符与表达式
位运算符与表达式
1 | int a=-3,b=3,x; |
求x值
- a=-3 -3的补码为 3 :00000011
反码:11111100
补码:11111101
- b=3 3的补码为00000011
- ^为位异或符号 即异取1 同取0
- 故取完为11111110 这为补码
- 转换为原码为 ==补码取反加1== 11111110
10000001
10000010
补码的定义
- ==在计算机中都用补码==
- 正数的补码为本身
- 负数的补码 即为其绝对值数的补码 eg.-3的补码为3的补码
整数安全漏洞
回绕(“特指无符号”)
if 两字节 则无符号数的取值范围为0~65535
故65535+1=0 0-1=65535
溢出 (“指有符号数”)
以两字节为例 有符号数的取值范围为-32768~32767
则32767+1=-32768
beacuse:32767的补码为 0111 1111 1111 1111
1 的补码为0000 0000 0000 0001
相加得 1000 0000 0000 0000 为-32768的补码
截断(”特指字节“)
- 宽度较大的整数存入宽度较小的整数 即高位被==截断==
Attention注意!
1 | int a=1; |
--a \\即a=0 后再继续--a\\即a=-1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 My blog!