您的位置:首页 > 编程语言

无符号数字与负数(编程细节)

2018-04-01 15:48 417 查看
首先运行一段程序,结果出现之前可以预测一下结果哦!

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
if(strlen("abc") < -1)
{
cout << strlen("abc")<<"    yes1" << endl;
}
else
{
cout << "no1" << endl;
}

if(sizeof("abc") < -1)
{
cout << sizeof("abc")<<"   yes2" << endl;
}
else
{
cout << "no2" << endl;
}

if(string("abc").size() < -1)
{
cout << string("abc").size()<<"  yes3" << endl;
}
else
{
cout << "no3" << endl;
}

return 0;
}


—————————————————————分割线——————————————————————————————-

这是运行的结果:

3   yes1
4   yes2
3   yes3


3明显是大于-1 的,,那为什么会输出yes呢??

因为
std::size_t strlen( const char* str );
它的返回类型是std::size_t。

再看size_t等同于什么类型:



这里说他类似与unsigned int 类型。在32位的系统中他相当于unsigned int 占有4个字节,,但是在64位操作系统下,它相当于unsigned long 占有8个字节,所以有可能它的值比Int大。。。

一般不要使用
int lenght = strlen(string_a);
这样的语句,他可能会超出int 范围,,当然应该也没人会一下输入那么长的字符串。

这里的-1 会被 转化为一个很大的无符号数字,

int a =-1;
unsigned int b =a;
cout<<b<<endl;


使用上面的代码测试一下:

b = 4294967295


2的32次方就是4294967296,,故-1就是2的32次方减去1 。

一个32位的负数值是-N,那么转化成unsigned的值是2^32 - N 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  无符号数 负数 编程 C