对1取非的操作不理解
Topic source看了评论和搜索了相关的知识理解了。
计算机底层使用二进制形式的补码来计算和存储数据,最高位表示符号,1-负数,0-正数
原码:一个数的二进制表示
反码:正数的反码和原码相同;负数的反码为符号位不变,其余在原码基础上按位取反
补码:正数的补码和反码,补码相同;负数的反码+1
===
所以更正下:
我实际的代码中:
int i= 1; // i 的二进制(补码):00000001 十进制:1 (省略高位的零,int类型有32bit)
int j = ~i; // ~i的二进制(补码):11111110(原码)-> 10000001(反码)-> 10000010(补码) 十进制:-2 (省略高位的零,int类型有32bit)
实际得到的 j 为 -2。
上一节中,总结了基本数据类型的存储大小,byte 为一个字节,一个字节包含 8 bit(8位)
int 4字节,32bit(32位)
- 1
无故之秋
我实际的代码中:
int i= 1; // i 的二进制:00000001 十进制:1
int j = ~i; // ~i的二进制:11111110 十进制:254
实际得到的 j 其实是 -2,这是为什么呢?