int 和 unsigned int

正常32位机器的 int 和 unsigned int 都是32位长,int 范围 -2147483648~2147483647,正数存原码,负数存补码。

(1)-6的二进制: 1000 0000 0000 0110(称为原码,原码是计算机显示给我的)
(2)对原码求反码:1111 1111 1111 1001(称为反码,保持符号位不变,将原码中的0变1,1变0)
(3)对反码加1:1111 1111 1111 1010(称为补码,补码是计算机中存储负数的形式)

unsigned int 范围 0~4294967295,存原码。

int a = -1;

unsigned int b = a;

强制转换 a 为 unsigned int 的话,a 本来是 0xffff ffff (-1的补码),转换时实际不变,还是0xffff ffff,但是如果已 %u 的unsigned int 格式 printf 出来就会是十进制的 2 的32次方减1,4294967295。

另外,做题的时候遇到的问题是,int 和 unsigned int 如果右移 32 位实际上并不会得到 0,而是不变,因为内部机制会判断右移位数过大,这是需要手动置0。

时间: 2024-11-02 01:33:04

int 和 unsigned int的相关文章

[转]iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别

在iOS开发中经常使用NSInteger和NSUInteger,而在其他的类似于C++的语言中,我们经常使用的是int.unsigned int.我们知道iOS也可以使用g++编译器,那么它们之间是否有什么联系呢? 从NSUInteger和NSInteger的定义文件中 NSObjCRuntime.h发现有这样的语句: #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUI

iOS NSInteger/NSUInteger与int/unsigned int、long/unsigned long之间的区别!

在iOS开发中经常使用NSInteger和NSUInteger,而在其他的类似于C++的语言中,我们经常使用的是int.unsigned int.我们知道iOS也可以使用g++编译器,那么它们之间是否有什么联系呢? 从NSUInteger和NSInteger的定义文件中 NSObjCRuntime.h发现有这样的语句: 1 #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_B

深度解析C语言int与unsigned int

就如同int a:一样,int 也能被其它的修饰符修饰.除void类型外,基本数据类型之前都可以加各种类型修饰符,类型修饰符有如下四种:1.signed----有符号,可修饰char.int.Int是默认有符号的.2.unsigned-----无符号,修饰int .char3.long------长型,修饰int .double4.short------短型,修饰int 我们主要来看一下signed和unsigned与int之间的联系与区别.什么叫做有符号,什么叫做无符号这个问题其实很简单,比如

c++ 中关于int,unsigned int , short的关系与应用

int类型比较特殊,具体的字节数同机器字长和编译器有关.如果要保证移植性,尽量用__int16 __int32 __int64吧 __int16.__int32这种数据类型在所有平台下都分配相同的字节.所以在移植上不存在问题. 所谓的不可移植是指:在一个平台上编写的代码无法拿到另一个平台上运行时,不能达到期望的运行结果. 例如:在32为平台上(所谓32位平台是指通用寄存器的数据宽度是32)编写代码,int 类型分配4个字节,而在16位平台是则分配2个字节,那么在16位上编译出来的exe, 其中是

unsigned int与int相加问题

作者 : 卿笃军 一道unsigned int与int类型的相加题目,引发了我对这个问题的思考. 首先要明白两个问题: 问题一. unsigned int 和 int到底哪个能表达出来的数上限大呢? 答:当然是unsigned int. 为什么? 答:因为,int将最高位看做是符号位,0表示'正',1表示'负',也就是说,最高位不能用来存值. 问题二. 当计算机进行两数相加的时候会如何进行类型转换呢? 答:当然是将上限小的转化为上限大的咯.(就是将int类型转化为unsigned int类型).

for( unsigned int i=heapSize/2-1; i>=0; --i)

unsigned int的表示 今天在写堆排序的时候遇到一个BUG void builMaxHeap( int *arr,unsigned int heapSize){ unsigned int i; for(i=heapSize/2-1; i>=0;--i){ std::cout<<i<<std::endl; //maxHeap(arr,i,heapSize); 这里暂且注释掉 } } 这他娘的真是整死人,以为是自己编的程序不对,输出的结果是 呵呵,只能呵呵了, 原因就是我

认识随机函数rand()和srand(unsigned int )

随机函数rand /* GitHub stylesheet for MarkdownPad (http://markdownpad.com) / / Author: Nicolas Hery - http://nicolashery.com / / Version: b13fe65ca28d2e568c6ed5d7f06581183df8f2ff / / Source: https://github.com/nicolahery/markdownpad-github */ /* RESET ==

C++中的(unsigned int)&amp;代表的意思

int  main() { using namespace std; int i = 20; int m = (unsigned int)&i; //注意这里的&符号 cout  << m << endl; } &:表示引用的意思,表示m是i的一个别名,相当于人的小名. 再看下面的例子: #include <stdio.h> #define FIND(struc,e) (int)&(((struc *)0)->e) typedef

c++ int,unsigned int混合表达式类型转换

测试代码: #include<cstdio> #include<iostream> using namespace std; int main() { unsigned int a = 3; int b=2,c=1; if(b<c-a) cout<<"int transform to unsigned int"<<endl; cout<<b<<" "<<c-a<<e