C语言之unsigned int和int的运算

原创 2013年12月02日 17:41:48

        首先先说明下:

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;

 


 

判断C语言中int 与 unsigned 乘法是否会溢出

在C语言中,int 与 unsigned 乘法被定义为产生w(w为机器字长)位的值。如果乘积超过w位,所产生乘积的高位将被舍弃。 下面这段代码用来判断整数乘法会不会溢出: /*练习题2.36*...
  • ljg888
  • ljg888
  • 2012年10月02日 10:09
  • 3924

C语言 算术转换 unsigned signed int

在C语言中,如果运算符的两个操作符不相同,那么它们之间对进行一定的算术转化,然后再进行运算操作。说明这个规则之前,先看一个例子 int x = -1; int y = 5; unsigne...

C语言char强制类型转换unsigned int时的问题

今天做socket通信项目的时候要从数据包的包头计算图片长和宽,结果图片大小不对显示了一张大长脸,做个记录给自己提个醒。 图片高度,高度都用四个字节表示,数据包从第五位开始每四位依次是宽,高,想也没...

在C语言中,double、long、unsigned、int、char类型数据所占字节数

和机器字长及编译器有关系: 所以,int,long int,short int的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short int) si...

坑!坑!坑!防不胜防的unsigned int的运算

我很早之前就知道,unsigned int与int运算的时候,int会被转化为unsigned int来进行运算。一直觉得定这条规则的人是极度反人类的,虽说unsigned int可以表示更大的正值,...

[C语言]unsigned int与 int

有时间记录一点东西。 上周在食堂吃饭时,遇到师弟,提到一个与unsigned相关的问题,大致意思是表达式运算中有unsigned类型,导致结果跟预期结果不一致(预期结果为负数,结果实际为一个大整数)...

c++ unsigned和int类型转换及运算

一、规则总结 1. 在c++中,如果赋值给无符号类型一个超过它表示范围的值(如负数),结果是初始值对无符号类型表示数值最大值取模后的余数。 2. 在c++中,如果表达式中同时有无符号类型和有符号类型,...

用C语言区分signed int 与 unsigned int的一种思路

转载自:http://blog.donews.com/littlefish/archive/2006/03/18/773954.aspx 一:分析 signed int 与 unsig...

volatile_unsigned_int

  • 2013年03月22日 23:27
  • 197KB
  • 下载

c语言通过int86()获取鼠标信息

  • 2013年04月26日 16:04
  • 149KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言之unsigned int和int的运算
举报原因:
原因补充:

(最多只允许输入30个字)