c语言的原码补码反码-位运算

本文介绍了C语言中负数以补码形式存储的原因,探讨了位运算如~、&、|、^的操作,并讨论了不同数据类型如int、unsigned int的取值范围。此外,提到了位运算在嵌入式系统中的应用,如用1字节控制8个灯泡的开关,并提出一个涉及位运算求余数的bug求解。
摘要由CSDN通过智能技术生成

c语言的原码补码反码-位运算

计算机内存负数的时候是存的补码容易运算

有无unsigned 的区别
数据在计算机上存储是2进制的 第一位是符号位 其余是数据位
unsigned 是无符号的意思 没有符号位 全都是数据位
比如
unsigned int int 占4字节8位在内存中
0000 0000 0000 0000 0000 0000 0000 0000
int 也占4字节8位 这时候第一位为符号位
1 000 0000 0000 0000 0000 0000 0000 0000
综上所属
int 类型最大值为2^31(^是多少次方不是异或)2147483648
unsigned int 类型最大值为2^32 4294967296
short 类型2字节16位
unsigned
0000 0000 0000 0000 2^16 65536
short
1 000 0000 0000 0000 32768
等等….

废话不多说上例子

#include<stdio.h>
#include<stdlib.h>
int main()
{
    //右移 >>
    //正 
    char ch1 = 2;
    //2用2进制表示 char 类型是1字节8位
    //            0000 0010 :2
    //向右移动1位   0000 0001 :1
    printf("%d",ch1>>1);//向右移动 结果1
    //负数
    char ch2 = -2;
    //1000 0010 -2的原码
    //1111 1101 -2的反码 反码就是在原码的基础上符号位不变其余位置0变1 1变0;
    //1111 1110 -2的补码 补码就是在反码的基础上加1 
    //我们这时候对-2进行移动 1111 1111
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值