位运算的示例代码如下:
<!---->#include <iostream>
using namespace std;
int main()
{
cout << "lenght of int = " << sizeof(int) << endl;
int a = ~5;
int b = ~(-6);
cout << "~5 = " << a << endl;
cout << "~(-6) = " << b << endl;
int i = 0x7ffffffd;//整数的16进制表示方法,在数字前加0x,比如0x10表示的是16,0x0a表示的是10。8进制表示发是开始加0,如010表示8。
cout << "i = 01111111 11111111 11111111 11111101 = " << i << endl;
i = i << 1;
cout << "i << 1 = " << i << endl;
int t = 0x7fffffff;
cout << "t = 01111111 11111111 11111111 11111111 = " << t << endl;
int k = t + 1;
cout << "k = t + 1" << endl;
cout << "k = 10000000 00000000 00000000 00000000 = " << t + 1 << endl;
cout << "k = t + 2" << endl;
cout << "k = 10000000 00000000 00000000 00000000 = " << t + 2 << endl;
getchar();
}
int型是4字节,32位,因为有符号,所以表示范围是[-2^31, 2^31-1]。即[-2147483648,
2147483647]。为什么负数会比整数多一个呢?
32位太长,我们以4位的例子来说明。
假设一个有符号整数有4位表示,比如0111表示7,原码1111表示-7,但是-7的补码是1001,0001表示1,原码1001表示-1,但是-1的补码是1111。
那根据范围公式,4位有符号数的范围是[-8, 7]。
7由0111表示,那么-8是哪个表示呢?经实验分析,发现-8的补码表示为1000。为什么是这样呢?我认为这就是一种规定,就像为什么1表示true,0表示false呢?都是规定,记住就好了。下面我根据我的理解,进行一下牵强的解释。
[-8, 7]为什么整数有7个,而负数有8个?4位的组合一共有2^4共16个,下面是4位编码和表示的对照表,编码使用补码。
<!---->0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 -8
1001 -7
1010 -6
1011 -5
1100 -4
1101 -3
1110 -2
1111 -1
由此可见,随着二进制表示的补码的不断增加,所表示的数从0,增加到整数最大,接着到负数最小,然后到-1。32位的int型也是这样的。当到最大正数时,再加1,就会到最小负数,也就是绝对着最大的负数。
16个数中,7个整数,1个零,另外7个是-1到-7。最后剩的-0,也就是1000,被定义为表示-8。
分享到:
相关推荐
用C++ 实现大整数的加减乘除运算,里面有很多值得学习的技巧
数据结构课程设计-大整数加减乘除运算的实现,包含源代码和实验报告,解压后可直接使用
位运算题目之两整数和(c++)
源代码包含128位大整数的加减乘除、取模、乘幂、2进制和10进制转换等运算,可用于大整数运算和加解密算法。
能够实现逻辑运算(逻辑非、逻辑加、逻辑乘、逻辑异)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。
五年级数学:《整数加法运算定律推广到小数》教学案例.pdf
通过2个64位INT整数实现的128位整数运算,可容易的扩展到更高位数的整数运算。
C++关于大整数类的相关运算包括重载加减乘除,赋值,输出和比较运算
请设计一个有效的算法,可以进行两个n位大整数的四则运算。 要求: 1.设计数据结构,存储结构; 2.在c兼容环境完成上述题目的代码编写与调试; 3.程序运行界面交互性好; 4.软件运行,给出测试数据。
辅助运算 (1)整数N模m的乘法逆t 要求:输入整数N和m,求出t,若t不存在,给出信息。 提示:这三个数满足:N*t%m=1,使用穷举法。 例如:当N为11,m为26时,由于(11×19)%26=1,所以11模26的乘法逆为19。 (2...
4.8实验-整数数据表示及运算
主要功能计算两个大整数 (220 位)的加减法等算术运算,按指定的格式输出结果。通过此课题,熟练掌握字符串、格式输出、文件的各种操作,以及基本的计算算法思想的应用。 (二 1.基本要求 (1) 输入功能:能实现从键盘或...
【转载】常用位操作 位运算应用口诀 ...位运算之美——用+,-和位运算实现正整数除法和取模(二) 位运算之美——用+,-和位运算实现正整数除法和取模(一) 位运算总结 收藏 位运算总结 用位运算求整数的绝对值的三种方法
c/c++ 长整数四则运算源代码_数据结构
编写程序实现两个超长正整数(每个最长80位数字)的减法运算。 【输入形式】 从键盘读入两个整数,要考虑输入高位可能为0的情况(如00083)。 1. 第一行是超长正整数A; 2. 第二行是超长正整数B; 【输出形式】...
【问题描述】 实现任意多位的两个大整数的加、减、乘运算。 【输入形式】 用文件“算式.txt”(与编译后的程序在同一目录下)输入两个十进制大整数A和B。 在文件“算式.txt”中依次分行输入以下内容:...
云南省楚雄彝族自治州小升初数学专题复习:整数的运算及应用.pdf
文章目录只用位运算不用算术运算实现整数的加减乘除运算位运算实现整型算术运算加法相应代码减法相应代码乘法相应代码除法相应代码 只用位运算不用算术运算实现整数的加减乘除运算 位运算实现整型算术运算 【题目】 ...
结果形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 测试数据: (1)0;0;输出“0”。 (2)2345,6789;-7654,3211;输出“1,0000,0000”。 (3)1,0000,0000,0000;9999,9999;输出“9999,...