数据类型长度、原反补码及移位
1 数据类型
java中:
byte 8位 1字节
short/char 16位 2字节
int 32位 4字节
long 64位 8字节
float 32位 4字节
double 64位 8字节
c在x8632位中
printf("%d\n",sizeof(char)); //1字节
printf("%d\n",sizeof(short)); //2
printf("%d\n",sizeof(int)); //4
printf("%d\n",sizeof(long)); //4
printf("%d\n",sizeof(float)); //4
printf("%d\n",sizeof(double)); //8
其指针大小均为4字节,寻址32位。
2 原补码
作用:一是减法变加法,二是正0与负0一致
结果:计算机中数值以补码形式表示
具体:-128=[1000 0000]补,32位系统中表示值为[-128, 127],0其补码仅为[0000 0000]
练习:
1)
int main()
{
char a=64;
a <<=1;
printf(“%d ”,a);
a>>=1;
printf(“%d ”,a);
return 0;
}
结果:-128 -64
说明:
有符号数据类型的移位操作:
对于char、short、int、long这些有符号的数据类型:
负数 左移:符号位始终为1,其他位左移
正数 左移:所有位左移,即 <<,可能会变成负数
负数 右移:取绝对值,然后右移,再取相反数 (对于x86平台的gcc编译器,最高位移入1,也就是仍保持负数的符号位,这种处理方式对负数仍然保持了“右移1位相当于除以2”的性质。)
正数 右移:所有位右移,即 >> ,高位补0
一个程序如果使用了有符号数的右移位操作,它就是不可移植的
因为在C语言标准中,只规定了无符号数的移位操作是采用逻辑移位(即左移、右移都是使用的逻辑左移和逻辑右移)。
而对于有符号数,其左移操作还是逻辑左移,但右移操作是采用逻辑右移还是算术右移就取决于机器了!(算术右移和逻辑右移的区别是:算术右移不右移符号位,即最高位,右移后前补0还是1取决于符号位的值;逻辑右移执行时将移动符号位,右移后前补0)。
2)
#include<iostream.h>
void main()
{
short int n=-1;
cout<<(unsigned short int)n<<endl;
}
结果:32位操作系统下为:65535
无符号即将符号位算为数值位考虑。
3)
unsigned char a=0xA5;
unsigned char b=~a<<4;
unsigned char c=~a>>4;
printf("b=%d\n",b); //b=160
printf("c=%d\n",c); //c=245
int i=4;
printf("i=4 left shift%d\n",~i<<2); //i=4 left shift -20
printf("i=4 right shift%d\n",~i>>2); //i=4 right shift -2
int j=-6;
printf("j=-6 left shift%d\n",~j<<2); //j=-6 left shift 20
printf("j=-6 right shift%d\n",~j>>2); //j=-6 right shift 1
3 进制转换
10进制转为R进制
整数部分通过连续/R,取在[0, R-1]间的余倒着连起。
小数部分通过连续*R,取结果中的整数顺着连起。
将两部分相加,即可。
转载于:https://www.cnblogs.com/ele7en/archive/2012/08/11/2633398.html
数据类型长度、原反补码及移位相关推荐
- 原反补码(从地址里讲解原反补)
简介数据的原反补码 一.概念的介绍 1. 原码:第一位为符号位 ,正数存储的是0,负数存储的是1 2. 反码:1->0 0->1 符号位不变 3. 补码:补码就是反码+1 4. 注意:正数 ...
- 原反补码的相互转换、补码加减法计算规则及例题
原.反.补码 正整数的原码.反码和补码是一样的 对于负数: 1.2. 原码 ⇋ 反码:符号位不变,数值位按位取反 3.4. 原码 ⇋ 补码:符号位不变,数值位按位取反,末位 + 1 5. 反码 → 补 ...
- 补码加减c语言,C语言计算器含二进制数加减原反补码(自己的期末作业)
用C++6.0编写的计算器,内含整数小数加减乘除.二进制数组加减及求原码补码反码! #include #include int main() { void top(); void no1(),no2( ...
- c语言实现补码加减,C语言计算器含二进制数加减原反补码(自己的期末作业)
用C++6.0编写的计算器,内含整数小数加减乘除.二进制数组加减及求原码补码反码! #include #include int main() { void top(); void no1(),no2( ...
- 2022-03-30 西安 javaSE(02)基本数据类型转换、自增运算、三元运算符、原反补码位运算
基本数据类型取值范围从小到大 1.byte<short<int<long<float<double 面试题:long占8个字节,float占4个字节,为什么float的取 ...
- c语言原码 补码 反码,C语言 原码--反码--补码
//原码,反码,补码 #include #include //数值的表示方法--原码.反码和补码 //原码:最高位为符号位,其余各位为数值本身的绝对值 //反码: //正数:反码与原码相同 //负数: ...
- 计算机组成原理整数乘法,计算机组成原理 - 定点整数的原码补码运算(待验证)...
计算机组成原理 - 定点整数的原码补码运算(待验证) 目录 〇.环境 对象 运算 定点整数原码.定点整数补码 移位.加.减.乘.除 原码定义: \(x=\begin{cases} x &0\l ...
- java反码补码原码作用_java原码补码反码关系解析
本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下 原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式 反码:把原码的二进制统统反过来,0变成1,1变成0 补码:负数的反 ...
- 真值 原码 补码 反码 移码
真值 原码 补码 反码 移码 真值是相对与其它四种的数字类型 书写中一般表示的数叫做"真值" 机器中编码表示的数 "机器数||机器码<原码 补码 反码 移码 > ...
最新文章
- python安装包为什么这么小-python安装后为什么找不到包
- Linux学习 - sed使用
- Linux debian 查看CPU温度
- 【Python系列】python GUI界面
- Linux 命令(71)—— ldconfig 命令
- HDU2008 数值统计【序列处理】
- Android开发系列——实战篇14:NFC开发(理论篇)
- 大型网站技术架构 读书笔记 (二) 大型网站架构模式
- 主板usb接口全部失灵_usb接口没反应,主板usb接口全部失灵
- swfupload 无法加载_SwfUpload在IE10上不出现上传按钮的解决方法
- OpenKG开源系列 | 大规模中文概念图谱OpenConcepts (浙江大学)
- mssql用户/角色无法查询sys.dm_tran_locks视图;消息 297,级别 16,状态 1,第 1 行 用户没有执行此操作的权限。
- 如何分分钟成为Java嵌入式开发人员
- 文件和文件夹的操作——文件流的使用
- 2020.2.19作业单
- IPv6 NDP邻居发现协议 1
- 电商系统:优惠券实体设计、数据库表设计、满减券、运费券
- Ubuntu系统管理 —— 磁盘的初始化及自动挂载
- php酒店入住时间怎么算,宾馆早上6点入住怎么算?正规宾馆上午八点开房应该到什么时间算一天...
- X64汇编语言寄存器结构及其与X86架构编程区别
热门文章
- 动手使用ABAP Channel开发一些小工具,提升日常工作效率
- 处理错误:ORA-27101: shared memory realm does not exist
- Linux下如何查看系统启动时间和运行时间(转)
- 由单例模式学到:静态构造函数和静态字段
- JavaScript open() 函数
- [更正]谈获取当前系统类型(SP OR PPC)
- Windows打印机驱动开发笔记(一)
- spring的自生一个bug
- android连接Mysql数据库之JDBC方式
- 跨系统远程登录用Linux系统远程登录windows7