编程学习基础--进制学习笔记整理(下)

五.原码反码补码

编码规则

不同文件有不同的编码规则
11010101
无符号数当中0xD5 213 有符号数时并非-213

正数的原码反码补码相同
表示: 1 00000001 6 00000110

正数的原码补码在计算机中的表示

int main(int argc,char*argv[])
{
    char x = 1;             #用到的数据宽度为8位
    printf("%x\n",&x);   #打印一下这个值在内存中的位置
    return 0;
}

找到内存中的值搜索到address,找到对应的值位01 转化位二进制为00000001
所以正数在内存中存的就是当前这个数的原码。

负数的原码反码补码

Ⅰ.有符号数的编码规则
1原码 最高为为符号位,其余各位为数值的绝对值
2反码 正数的反码跟原码相同
负数:符号为为1,其余为对原码取反
3补码 正数的补码跟原码相同
负数:符号位为1,其余位为对原码取反加1
表示 -1 原码 10000001 反码11111110 补码 11111111
表示 -7 原码 10000111 反码11111000 补码 11111001

int main(int argc,char*argv[])
{
    char x = -1;              #用到的数据宽度为8位
    printf("%x\n",&x);     #打印一下这个值在内存中的位置
    return 0;
}`在这里插入代码片`在这里插入代码片

得出结论为-1在内存中的值为FF即
!!!负数在内存中以补码的形式中存在.

有无符号数区分表

在这里插入图片描述

六.无符号有符号数

Ⅰ.无符号数的编码规则
这个数是多少就存多少
10011010 是一个无符号数的话则为0x9A 数的绝对值 只有正数
Ⅱ.有符号数的编码规则
有符号数最高为是0的话 这个数一定是个正数
有符号数最高为为1的话 这个数一定是一个负数
00011010 是1A
10011010 是

int main(int argc,char*argv[])
{
    int x = 0x1A000000;
    printf("以无符号形式显示:%u\n",x);
    printf("以有符号形式显示:%d\n",x);
    return 0;
}

以无符号形式显示:436207616
以有符号形式显示:436207616
则说明有符号数为正时与无符号形式的编码方式是一样的。

 int main(int argc,char*argv[])
{
    int x = 0x9A000000;
    printf("以无符号形式显示:%u\n",x);
    printf("以有符号形式显示:%d\n",x);
    return 0;
}

以无符号形式显示:2583691264
以有符号形式显示:-1711276032
0x9A时 10011010
-1,711,276,032‬
FFFF FFFF 9A00 0000‬
1111 1111 1111 1111 1111 1111 1111 1111 1001 1010 0000 0000 0000 0000 0000 0000‬

七.计算机中的运算

运算
计算机只认识0和1,归根结底计算机就是对0和1做运算(通常成为位运算)
1 与运算
两个位都为1时结果才为1
1011 0001
and(&) 1101 1000
1001 0000
2.或运算
只要有一个位为1就是1
1011 0001
or(|) 1101 1000
1111 1001
3.异或运算
不一样的时候是1
1011 0001
xor(^) 1101 1000
0110 1001
4.非运算
0就是1,1就是0
1101 1000
not(~) 0010 0111
5.左移
各二进位全部左移若干位,高为丢弃低位补零
sh(<<) 1101 1000 左移两位为:0110 0000
6.右移
sar 11010101 1111 0101
对应C语言(>>)
int a = 10;
printf("%d\n,a>>2");

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值