数据类型长度、原反补码及移位

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值