我有个问题。我的节目里有台词:
sprintf(buff,"Nieznany znak: %d",(char)va_arg(x, const char)); break;
为什么在编译后我有一个错误:
error.c: In function 'error':
error.c:30:46: warning: 'char' is promoted to 'int' when passed through '...' [e
nabled by default]
case 0xfe: sprintf(buff,
C中无符号int的大小是0 to 65,535 or 0 to 4,294,967,295。
我用C语言进行了以下代码的测试:
unsigned int number = 0;
number -= 300;
printf("%d\n", number);
输出:-300
我记得,如果unsigned int变量的值低于0,它应该环绕,并且我期望输出类似于4294966996。但是,从控制台输出的输出是-300。
我在C++中测试了类似的语句,它确实给了我4294966996。
我的问题是:为什么输出-300,尽管它是一个unsigned int
PS:我看过几篇标题相似的帖子
我正在阅读Array.prototype.some在上的实现。
它包含了一段入侵代码:
var t = Object(this);
var len = t.length >>> 0;
for (var i = 0; i < len; i++) {
为什么它调用len = t.length >>> 0而不是len = t.length
>>> 0有什么不同?
当我运行下面的程序时,它输出类似109876543210-1-2-3-4-5-6-78-9-10-11-12-和s0 on。为什么会这样呢?无符号整数的概念是什么?
main ()
{
unsigned int i;
for (i = 10; i >= 0; i--)
printf ("%d", i);
}
我正在阅读Andrew和BarbaraE.Moo所著的“加速C++”一书,并对第二章中的主要例子提出了一些问题。代码可以概括如下,并且正在使用g++编译而没有警告/错误:
#include <string>
using std::string;
int main()
{
const string greeting = "Hello, world!";
// OK
const int pad = 1;
// KO
// int pad = 1;
// OK
// unsigned int pad = 1;
代码如下:目标是判断数组中所有成员的和是正还是负。我知道无符号int是一个错误,因为我想看看它会打印什么。所以问题是为什么它打印负数,我的意思是,将负整数赋值给无符号整数的结果是什么。
#include <stdio.h>
#define ARR_SIZE 5
int main() {
int array[ARR_SIZE] = {1,-2,3,4,-5};
unsigned sum;
int i;
for ( i = 0, sum=0; i < ARR_SIZE; i++ )
sum += array[i];
if( sum > -1 ) printf
我在上看到了下面的示例
int x; // OK: the value of x is indeterminate
int y = x; // undefined behavior
在这里,int y = x;是未定义的行为,因为x未初始化。
但,
unsigned char c; // OK: the value of c is indeterminate
unsigned char d = c; // OK: the value of d is indeterminate
这里,unsigned char d = c;是不确定行为,但unsigned char c;也是一个
当我打印以下内容时,为什么会得到-1?
unsigned long long int largestIntegerInC = 18446744073709551615LL;
printf ("largestIntegerInC = %d\n", largestIntegerInC);
我知道我应该使用llu而不是d,但是为什么我得到的是-1而不是18446744073709551615LL?
是因为溢出吗?
为什么打印x总是等于零?
#include <stdio.h>
int main()
{
unsigned char num, x, nnum, y = 0;
printf("please enter the number of bits u want to clear \n");
scanf("%d%d", &x, &y);
printf("%d%d", x, y);
return 0;
}
我尝试将它们分开放置,但从y中获取变量后,x变为零。我知道它们最终会存储在堆栈中,每
我试图在iOS和OpenGL ES中开发一个基本的游戏,但是我在制服上遇到了这个问题,下面是将值传递给我的制服的代码:
glBindVertexArrayOES(_vertexArray);
// Render the object with ES2
glUseProgram(self.shaderProgram);
glUniformMatrix4fv(uniformModelViewProjection, 1, 0, modelViewProjectionMatrix.m);
// Get uniform center position
glUniform4fv(uniformCen
我试着添加未签名,但错误仍然发生,cpplint发誓很多因为这个,我只是累了,想睡觉
string MinHeap::get_binary_string(unsigned int n,
unsigned int bit_size = -1) {
stringstream stream;
string reverse_binary, binary_str;
do {
stream << n % 2;
n /= 2;
} while (n);
unsigned int sizeB = bit_size;
我正在学习C++语言,我书中的一个建议是不要混入表达式、符号类型和无符号类型,因为有符号类型将被转换为无符号类型。
例如:
unsigned int u = 10;
int a = 42;
std::cout << u - a << std::endl; // here the value will wraps around
在这个程序之后,如果我试图检查带有type的类型,结果是int,为什么?为什么a的类型不是更多无符号,而是返回到int?
unsigned short s;
s = 0xffff;
int i = s;
这里的扩展是如何工作的?添加了2个更大的位数字节,但我搞不清是1还是0在那里扩展。这可能是与平台相关的,所以让我们关注Unix的功能。int的两个较大的顺序字节会被1或0填充吗?为什么?
基本上,计算机是否知道s是无符号的,并正确地将0分配给int的高位?那么i现在是0x0000ffff了?或者,由于ints在unix中是默认签名的,它会从s (A1)中提取带符号的位并将其复制到更高阶字节中吗?
在计算char、short、int和long变量范围的过程中,包括有符号变量和无符号变量,我得到了以下解决方案的帮助:
根据解决方案1,我期望下面的代码中的(unsigned short)~0输出-1和65535,假设它的行为与两个格式说明符的(unsigned int)~0代码相同。
// the two statements below produce different results
printf("Value of unsigned int is %d\n", (unsigned int)~0); // outputs -1
我对C不熟悉,假设我想打印一个短int,如下所示:
short s = 0xbeef;
printf("This is 0x%x", s);
输出为0xffffbeef
看起来short有四个字节,但实际上short只有两个字节,那么为什么%x不能正确地打印它呢?如果它有一个至少需要4个字节表示的规则,那么为什么输出是0xffffbeef而不是0x0000beef?
示例代码:
long num1 = -1;
unsigned long num2 = 1;
if (num1 > num2)
printf("Num1 is greater\n");
else
printf("Num2 is greater\n");
为什么这个值将num1 > num2计算为true而不是false?