#include <stdio.h>
int arr[] = {1,2,3,4,5,6,7,8};
#define SIZE (sizeof(arr)/sizeof(int))
int main()
{
printf("SIZE = %d\n", SIZE);
if ((-1) < SIZE)
printf("less");
else
printf("more");
}
Run Code Online (Sandbox Code Playgroud)
编译后的输出gcc是"more".为什么if条件,即使失败-1 < 8?
以下哪项是数据类型升级和降级:
char ch = 'C';
int i = 65;
float fl = 2.2;
ch = ch + 1;
i = fl + 2 * ch;
fl = 2.0 * ch + i;
ch = 5212205.17;
Run Code Online (Sandbox Code Playgroud)
如果我说的话我是否正确
促销:
i = fl + 2 * ch;
fl = 2 * ch + i;
降级:
ch = 5211205.17;
Run Code Online (Sandbox Code Playgroud)
不知道
ch = ch + 1;
Run Code Online (Sandbox Code Playgroud)
也降级..请帮忙:)
void foo(void) {
unsigned int a = 6;
int b = -20;
if (a+b > a) {
printf("> a");
} else {
printf("< a");
}
}
Run Code Online (Sandbox Code Playgroud)
我试图了解上面的整数提升示例发生了什么.我知道,a = 6和b = -20输出应该是> a由于b被晋升为unsigned int.但是,< a如果我分配输出b = -5.在这种情况下输出也不应该是相同的,因为值b = -5也被提升为unsigned int?
当我使用size_t类型(或无符号长整数)进行算术运算时,我应该多么小心地使用类型文字来装饰整数常量.例如,
size_t a = 1111111;
if (a/2 > 0) ...;
Run Code Online (Sandbox Code Playgroud)
当编译器进行除法时会发生什么?它将2视为整数还是无符号整数?如果是前者,那么(unsigned int)/(int)的结果类型是什么?
我应该经常小心地写'你'文字
if (a/2u > 0) ...;
for (a=amax; a >= 0u; a -= 3u) ...;
Run Code Online (Sandbox Code Playgroud)
或编译器会正确猜测我想使用无符号整数运算?
gcc 4.8.4警告1u << 63ul?(假设64位long和32位int)并计算0.这是正确的(没有晋升1u到1ul转移之前)?
ISO/IEC 9899:201x,6.3.1.8(通常的算术转换):"许多期望算术类型的操作数引起转换的运算符"; 6.5.7(按位移位运算符):"对每个操作数执行整数提升......".
但我无法得出结论.哪些是"很多运营商"?据我所知,"整数提升"不属于宽泛的类型int(我是否正确?),但标准没有明确声明对于隐式类型转换不考虑按位移位的右操作数.
#include <stdio.h>
int main()
{
unsigned int count=1;
signed int val = -20;
signed int div=(val/count);
signed int div1=(val/(signed int)count);
printf("div %d div1 %d \n",div,div1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
div -20 div1 -20
Run Code Online (Sandbox Code Playgroud)
但如果count = 5则输出:
div 858993455 div1 -4
Run Code Online (Sandbox Code Playgroud)
在count = 5的情况下,signed int被隐式转换为unsigned int,为什么不为count = 1
你可以证明以下代码:
#include<stdio.h>
int main()
{
if(sizeof(int) > -1)
{
printf("\nTrue\n");
}
else
{
printf("\nFALSE\n");
}
}
Run Code Online (Sandbox Code Playgroud)
输出是FALSE.....建议我的原因
假设我有一台 32 位机器。
我知道在整数提升期间,表达式被转换为:\
int 如果原始类型的所有值都可以用 int 表示unsigned 除此以外你能解释一下下面的表达式会发生什么吗?总的来说,这里的排名是如何工作的?
第一个片段:
si16 x, pt;
si32 speed;
u16 length;
x = (speed*pt)/length;
Run Code Online (Sandbox Code Playgroud)
第二个:
x = pt + length;
Run Code Online (Sandbox Code Playgroud)
si16均值signed short(大小 16 位)、si32位均值signed int(大小 32 位)和u16均值unsigned short(大小 16)
我发现以下链接非常清楚地描述了这个问题: 隐式类型转换。
具体看Lundin的回答,很有帮助!
c ×8
c++ ×3
bit-shift ×1
comparison ×1
if-statement ×1
literals ×1
signed ×1
sizeof ×1
types ×1