原码、反码、补码计算及应用
2016-04-23 11:10
447 查看
若m=8,其补码形式为0000 1000 ,则~m=-9
因为~m为1111 0111,为负数,除符号位之外按位取反:1000 1000,再+1为1000 1001即是-9
32位机中,整形数int占4个字节即16位,为方便起见,我们写成8位
在电脑内存中,数值型据是以补码的形式存在的。原码就是这个数本身的二进制形式。
正数的反码和补码都是和原码相同。
负数的补码是反码再+1。负数的绝对值等于: 取反 + 1。
若以8位计算:1111 0011 取反加1为0000 1101 = 13
所以1111 0011为-13 最高位为符号位。
负数的反码是将其原码除符号位之外的各位求反
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
求负数补码的步骤:原码》反码》补码 !!!!!
如-7原码为1000 0111,反码为1111 1000,则补码即为反码+1:1111 1001
按位与运算: 按位与运算符”&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
按位或运算: 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
按位异或运算: 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。
例题:
请问该程序的输出是多少? 答案:173
因为~m为1111 0111,为负数,除符号位之外按位取反:1000 1000,再+1为1000 1001即是-9
32位机中,整形数int占4个字节即16位,为方便起见,我们写成8位
在电脑内存中,数值型据是以补码的形式存在的。原码就是这个数本身的二进制形式。
正数的反码和补码都是和原码相同。
负数的补码是反码再+1。负数的绝对值等于: 取反 + 1。
若以8位计算:1111 0011 取反加1为0000 1101 = 13
所以1111 0011为-13 最高位为符号位。
负数的反码是将其原码除符号位之外的各位求反
[-3]反=[10000011]反=11111100
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101
求负数补码的步骤:原码》反码》补码 !!!!!
如-7原码为1000 0111,反码为1111 1000,则补码即为反码+1:1111 1001
按位与运算: 按位与运算符”&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
按位或运算: 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
按位异或运算: 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。
例题:
#include<stdio.h> int main() { unsigned char i=7; int j=0; for(;i>0;i-=3) { ++j; } printf("%d\n",j); return 0; }
请问该程序的输出是多少? 答案:173
unsigned char 8位数据位,范围0-255, 所以-2(补码:11111110)时,溢出变成254; 同理-1(补码:11111111)时,溢出变成255; 最后减到0时,不满足循环条件,for停止。 刚好173次。 (1)7 4 1 -2 ==> 共4次 (2)254 251 ... 5 2 -1 ==> 共85次 (3)255 252 ... 6 3 ==> 共85-1=84次(因为3-3=0,不能进入循环了) 所以总共173次。
相关文章推荐
- 7个jquery easy ui 基本组件图解
- 商业的本质
- pt-kill 常用杀进程参数介绍
- Nginx配置性能基本优化的方法
- 软考信息系统监理师,2016年4月22日作业
- Android开发中adb启动失败adb连接异常的解决办法
- 本地多ssh-key问题
- 集合问题 动态规划 01背包
- swift 学习计划(一) 解包、隐式解包的可选类型
- MyBatis 指定的转换无效
- Nginx ServerName 配置说明(转)
- Activity 设置Theme.Dialog自定义View高度
- Python 列表、元组、字典、集合
- javascript中 string的charAt()和charCodeAt()方法
- Hadoop: strange NullPointer Exception running in MapReduce 的解决办法
- oracle10g调整sga和pga大小
- centos6.5 nginx开机启动
- 使用pt-kill根据一定的规则来kill连接的方法
- PS简单制作一个真实的泡泡
- hdu 5463