#include <stdio.h>
int main(void)
{
if (sizeof(int) > -1)
printf("True");
else
printf("False");
}
Run Code Online (Sandbox Code Playgroud)
它打印False.为什么sizeof()不返回值if?
视频"江南风格"(我相信你已经听过)在youtube上的视图超过了20亿.事实上,谷歌表示,他们从未预料到视频会超过32位整数......这暗示谷歌使用的是视频 int 而不是unsigned视频.我认为他们必须重新编写代码以适应更大的视图.
检查他们的风格指南:https://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Integer_Types
......他们建议"不要使用无符号整数类型",并给出一个很好的理由:unsigned可能是错误的.
这是一个很好的理由,但可以防范.我的问题是:一般来说编码练习是不是很糟糕unsigned int?
什么是位表示unsigned int x =-1;
我们可以使用负整数分配unsigned int吗?
#include<stdio.h>
int main(){
unsigned int x = -1;
int y = ~0;
if(x == y)
printf("same");
else
printf("not same");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
相同
怎么可能,x是无符号的
#include<stdio.h>
int main()
{
unsigned int x = -4;
if (x == -4)
printf("true");
else
printf("FALSE");
}
Run Code Online (Sandbox Code Playgroud)
输出:
真正
好的,试着理解为什么下面的if语句是假的.我把它翻了出来,无法理解这里发生了什么.
#define SIZE (sizeof(arr)/sizeof(int))
int main(int argc, char** argv)
{
int arr[] = {1,2,3,4,5,6,7,8};
if ( -1 <= SIZE )
printf( "true" );
else
printf( "false" );
return 0;
}
Run Code Online (Sandbox Code Playgroud) a是带符号的int并且包含-100 b是unsigned int并且包含500
a<b returns FALSE!!
Run Code Online (Sandbox Code Playgroud)
为什么到地球?:P
我可以将b转换为signed int并获得正确的结果,但是保持原样而不是结果让我感到惊讶,因为我不知道为什么-100 <500应该是假的,就像编译器转换为无符号类型一样自动(这显然不是程序员要求的).
如果我们保持原样,即第一个签名和第二个未签名,那么为什么要这样做
这真的很混乱.
现在我必须纠正我的所有代码,寻找有符号和无符号整数之间的比较,并将这两个变量转换为我的意思.: - /
在混合有符号和无符号类型时,我还需要注意其他任何情况吗?
请不要回答显而易见的"一般情况下使用无符号类型是不可取的,为什么不坚持只使用签名类型?你会更安全".谢谢.
干杯.
std::vector<int> tmp = ...
for(int i = 0; i <= tmp.size() - 3; i+=2){
std::cout << "i: " << i << " , tmp.size(): " << tmp.size() << std::endl;
if(tmp[i] == tmp[i+1]){
final.push_back(tmp[i] * 2);
}else{
final.push_back(tmp[i]);
final.push_back(tmp[i + 1]);
}
std::cout << "\ntmp.size() at the end of loop: " << tmp.size() << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我有以下输出:
为什么循环执行i明显要大得多tmp.size()?