c language data knowlege

1、根据char的取值范围和unsigned char的取值范围的位数,如char和unsigned char都是8位,char型最高位是符号位,1代表为负数,所以为-2^7-1~~+2^7-1 即 [-128, 127] ,而unsigned char为2^8-1=256 即0~255。如,2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=2^8-1, 取值范围由等比数列求出。
2、从一个小数转换为一个大数,比如 short ——>int,需要做高位的扩展。目前所知,有符号位扩展,和zero扩展两钟。符号位扩展即是把高位段全部赋值为小数的最高位数,比如0xC0转换为0xFFFFFFC0,而 0x70,转换后为0x00000070.  zero扩展即是把高位段都赋值为0。据我了解,对于signed类型的转换,用的是符号位扩展,而对于unsigned类型的转换,所用的是zero扩展。其目的是保留了转换之前的真值大小。计算机的数值编码都以补码表示。
3、9与-9
9的源码为00001001,
-9,补码为最高位置1 ,其余取反也就是11110110,然后在最低位加1即可即11110111
4、#include <stdio.h>
     #include <stdlib.h>
     int main()  
{
    int i =129;  
    char cha= (char)i;	 
    int b = (int)cha;	             
    printf("sign extension: %d/n",b);
    system("pause");
    return 1;  
}
int 129 原码为 0x ffff ff81 或低8位是:  1000 0001, 计算机中补码和原码相同 
(char)i 后变为 1000 0001
(int)cha 后,从补码计算可得:1000 0001-1= 1000 0000 高位不变其他取反,原码为 11111 1111 即 -127


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值