C语⾔之unsignedint和int的运算
⾸先先说明下:
1)数值在计算机中是以补码的形式存储的。同时如果两个补码相加时,最⾼位也就是我们的符号位如果有进位,是需要丢弃的。正数的补码是⾃⼰本⾝,
负数的补码是符号位为1,其余位为该数绝对值的原码按位取反,然后整个数再加1.
2)如果⼀个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较⾼类型,然后再参加运算,转换规则如下图所⽰。
double ←── float ⾼
↑
long
↑
unsigned
↑
int ←── char,short 低
ok现在开始看⼏个例⼦:
例1:
两个负数的补码相加int a=6;
unsigned int b=-20;
unsigned int c = a+b;
c是多少?
a:0x00 00 00 06
b:0xff ff ff ec (0x00 00 00 14->取反0x ff ff ff eb->加1 0x ff ff ff ec)
c 的值为:0x ff ff ff f2
例2:
int a = -6;
unsigned int b = 20;
unsigned int c = a+b;
c是多少
a: 0x ff ff ff fA
b:0x 00 00 00 14
c=0x00 00 00 0e;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论