c或c++语言什么时候用补码来运算,C/C++(基础编码-补码详解)

两个数的交换

1.引入第三者。 2.求和运算,求差。(这样会产生内存溢出) 3.异或运算

a = a^b;

b = a^b;

a = a^b;

8b(bit位) = 1B(Byte=字节)//最小单位是字节

32位机:2^32 = 4G寻址能力

(王爽--统一编址,汇编语言) char类型一个字节,8位。[-128,127],2^8=256种, why?[-128,127];深层的编码采用补码,1,表示负数。 正常的:

0000 0000 1

0000 0001 2

0111 1111 127

...

1000 0000 -0

...

1111 1111 -127

这样1+-1=-2; 补码规则:

0000 0000 0

0000 0001 1

0111 1111 127

...

1000 0000 -128

-127

...

1111 1111 -1

计算机只会做加法,1+-1=0;0000 0001 + 1111 1111= 0000 0000;高位溢出得0;

#include

int main() {

char a = 0;

disBin(a);

char b = 1;

disBin(b);

char c = 2;

disBin(c);

char d = 127;

disBin(d);

char e = -128;

disBin(e);

char f = -2;

disBin(f);

char g = -1;

disBin(g);

}

//打印一个数的二进制

void disBin(char ch) {

int i = 8;

while(i--) {

if((1<

printf("1");

}else {

printf("0");

}

if(i%4 == 0) {

printf(" ");

}

}

putchar(10);

}

补码的出现所有的乘法,除法,减法,都用减法实现。 补码的规则:(运算互为逆运算) 所有的整数的补码是他本身,所有的负数,取绝对值后取反,加一。 逆过程的运算,最高位是1,是负数。全部参与运算取反加一。 0的补码是0; 补码的运算相当于12进制的时钟,其中顺时针为正,逆时针为负。例如:当前时钟在3点,要点到8点。可以顺时针一可以逆时针。3+5=8,(3+12)-7=8;中的12溢出,在这之中相加互为12的称之为“补数”。 计算机中的所有减法,乘法,除法都可有加法计算。 1-2=1+(-2),也就是相当于1加上-2的补码。 注意:一个8位的空间,如果用来表示无符号数0-255(0-2^8-1),如果表示有符号的数:-128-127(-2^7-2^7-1)。

sizeof();

sizeof(char);//1字节

sizeof(short);//2字节

sizeof(int);//4字节

sizeof(long);//4字节

sizeof(long long);//8字节

1字节 char

0 - 255 unsigned char(无符号) 0 -2^8-1

-128 - 127 signed char -2^7 -2^7-1

2字节 short

0 - 65535 0 - 2^16-1

-32768 - 32767 -2^15 - 2^15-1

4字节 int

0 - 2^32(40亿)

-2^31 - 2^31-1

long(4个字节)没有扩展,

long long(8个字节)。

0 - 2^64

-2^62 - 2^63-1

int 基本整型 理想的32位机,地址总线和数据总线都是32位的。

有效数字,从左至右不为0的数字。超出类型的限制之后的数字不保证正确。 float,doouble;

数据类型图:

c1520033f8850dcfdf01f0302d9af8736c7.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值