C语言中位移运算详解(精髓:内存存放补码)
来源:互联网 发布:阿里云网站怎么备案 编辑:程序博客网 时间:2024/05/20 20:08
例如:
unsigned char x = 0x34; ----->二进制数:0011 0100
内存中的形式为:0011 0100
X<<1 ==> 移位前:0011 0100
移位后:0110 1000 ----->0x68 ----->十进制数:104
一、逻辑右移(针对无符号数): 向右移动,高位补0,低位舍弃。
例如:
unsigned char x = 0x34;==》二进制数:0011 0100
内存中的形式为:0011 0100
X >> 1 移位前:0011 0100
移位后:0001 1010 ------>0x1a ------>十进制数:26
二、算术右移(针对有符号数):正数,向右移动,高位补0,低位舍弃。
负数,向右移动,高位补1,低位舍弃。
正数: (正数的补码就是原码)
char x = 3;——>二进制数:0000 0011
内存中的形式为:0000 0011
X >> 1 移位前:0000 0011
移位后:0000 0001 ———>0x1 ——>十进制数:1
负数:(负数的补码是符号位不变,各位取反加一)
char x = -3;//3的二进制数位 0000 0011,-3最高位为1.
则-3的原码:1000 0011
反码: 1111 1100
补码:1111 1101 (内存中存的是补码)
故在内存中的存储方式为:1111 1101
X >> 1; 向右移动,高位补1
移动前:1111 1101
移位后:1111 1110
移位后内存补码为:1111 1110
我们若是printf打印数据,就要读取内存。需要把补码转换成反码来查看。即。
补码:1111 1110 (最高位为1,是负数,对补码求补码的原码)
反码:1000 0001
原码:1000 0010===》-0x2===>-2
- C语言中位移运算详解(精髓:内存存放补码)
- C语言中位移位运算符
- C语言中位移位运算符
- C语言中位移位运算符
- C语言中位移位运算符
- C语言中位移运算的规则
- c语言位移运算
- C语言中位运算符--位移运算符
- C语言的位移运算
- C语言的位移运算
- C语言中的位移运算
- C语言中的位移运算
- C语言中的位移运算
- C语言的位移运算
- C语言中补码的整数运算特性
- C语言中位移问题
- C语言的位移运算符
- C-位移运算
- java基础知识
- Drools6.4.0结合Maven实例
- maven 项目发现pom文件下的jar不更新
- QString,char*,string之间的互相转换
- DNS学习笔记-服务的配置与基础概念
- C语言中位移运算详解(精髓:内存存放补码)
- svg path 解析
- GitHub SSH key的创建添加
- android 自定义 view 之ViewGroup(四)
- java.lang.UnsupportedOperationException
- nginx rewrite 实现URL跳转
- Python函数式编程
- 4 两个有序数组中第k小的数
- kubenetes学习3--Namespace命名空间