为什么对1取反为-2?

为什么

int i =5;

~i = -6

int j = -1;

~j = -2

?

原来计算机中带符号的整数以二进制的补码进行存储

参见:

http://www.cnblogs.com/dolphin0520/archive/2012/10/09/2711768.html

从原码/补码的角度来看,就清楚了

1        
原码 00000000 00000000 00000000 00000001
取反 11111111 11111111 11111111 11111110
-2        
原码 10000000 00000000 00000000 00000010
反码 11111111 11111111 11111111 11111101
补码 11111111 11111111 11111111 11111110
         
5        
原码 00000000 00000000 00000000 00000101
取反 11111111 11111111 11111111 11111010
-6        
原码 10000000 00000000 00000000 00000110
反码 11111111 11111111 11111111 11111001
补码 11111111 11111111 11111111 11111010
时间: 2024-11-05 17:08:12

为什么对1取反为-2?的相关文章

为什么对1取反为-2?

为什么对1取反为-2? int i =5; // ~i = -6 int j = 1; // ~j = -2 为什么? --原来计算机中带符号的整数以二进制的补码进行存储. 参见: http://www.cnblogs.com/dolphin0520/archive/2012/10/09/2711768.html 从原码/补码的角度来看,就清楚了. 1 原码 00000000 00000000 00000000 00000001 取反 11111111 11111111 11111111 111

C语言--数据类型--取值范围

C 语言基本数据类型:字符型(char)整形(short, int, long)浮点型(float, double) 注:如下类型字节数指一般情况,不同的平台会有所不同,具体平台可以用sizeof 关键字测试一下. 类型 字节数 类型 字节数 char  1 short 2 int  2(16位系统)或4(32位系统)  long 4 float 4 double 8 类型 范围 类型 范围 (signed)char -128~~127 unsigned char 0~~255 (signed)

java中为什么byte的取值范围是-128到+127

概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是00010101,则其补码同样为00010101-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011 步骤:1.byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为0111111

c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数据类型, 还有BOO数据类型, 以及一些其它的数据类型, 如自定义的结构体数据类型 BOOL数据类型是一种表示非真即假的数据类型, 布尔类型的变量只有YES和NO两个值. YES表示表达式结构为真, 反之, NO表示表达式结果为假(在c语言中, 认为非0即为真), BOOL类型主要用与分支结构或循环

java中byte取值范围为什么是 -128到127

概念:java中用补码表示二进制数,补码的最高位是符号位,最高位为"0"表示正数,最高位为"1"表示负数.正数补码为其本身:负数补码为其绝对值各位取反加1:例如:+21,其二进制表示形式是00010101,则其补码同样为00010101-21,按照概念其绝对值为00010101,各位取反为11101010,再加1为11101011,即-21的二进制表示形式为11101011 步骤:1.byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其

负数取反,单目运算“-”的运算

首先看代码: int main(){ int i=-2147483648; return printf("%d,%d,%d,%d",~i,-i,1-i,-1-i); } 输出结果为: 2147483647,-2147483648,-2147483647,2147483647 这里就涉及到对负数取反,单目运算符"-"的理解,在int占4个字节,大小范围为-2147483648~2147483648,最高位代表符号位,所以第32位为1,这里就需要理解计算机中负数的表示形

第3篇-JAVA基础

第3篇-JAVA基础 每篇一句 :目标是给梦想一个期限,行动与坚持就是实现梦想的过程 初学心得: 遇到困难或问题,它不是休止符,而是引向你如何解决问题的标识 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-03-26| JAVA基础 Ⅱ] 上篇回顾 上篇文章中我们学习了JAVA底层的运行机制与深入剖析以及解释其中JAVA基础代码的含义 本篇文章将JAVA基础Ⅱ全面剖析解释,因为JAVA基础非常重要,务必要牢记知识点!!! 1.JAVA基础语法格式 JAVA采用unicode编码 1

c语言的位操作

c语言的位操作最常用的地方就是用在对寄存器的写值上. 一.基本的一些概念 1.位与:& 操作:1 & 1 = 1: 1 & 0 = 0: 0 & 0 = 0: 特点:只有全是1的时候才是1,其他情况都是0. 总结:任何数和0位与就是0,和1位与没有变化,所以位与常用在清零上(清零用位与). 2.位或:| 操作:1 | 1 = 1: 1 | 0 = 1: 0 | 0 = 0: 特点:只有全0的时候才是0,其他情况都是1. 总结:任何数和1位或就是1,和0位或没有变化,所以位或

Python自动化运维课程学习--Day2

本文为参加老男孩Python自动化运维课程第二天学习内容的总结. 大致内容如下: 1.python模块初识 2.python程序运行流程 3.python数据类型(只讲了numbers, bool, strings, bytes, list, tuple, dict, set) 4.python数据运算 0.关于本文中所有运行Python代码的环境: --操作系统:Ubuntu 16.10 (Linux 4.8.0) --Python版本:3.5.2 --Python IDE: PyCharm