计划1:
#include <stdio.h>
int main()
{
if (sizeof(int) > -1)
printf("Yes");
else
printf("No");
return 0;
}
输出:No
计划2:
#include <stdio.h>
int main()
{
if (2 > -1)
printf("Yes");
else
printf("No");
return 0;
}
输出:Yes
问题:
sizeof(int)
被视为unsigned
?2
被视为signed
?答案 0 :(得分:2)
签名和无符号整数之间的通常算术转换是常见问题。 sizeof
运算符返回类型size_t
的值,这是<stddef.h>
中定义的一些实现定义的无符号整数类型(另请参阅this answer)。
整数常量-1
的类型为int
。当size_t
实现为“至少”unsigned int
时(在您的情况下很可能发生),则二进制运算符<
的两个操作数都将转换为无符号类型。无符号值不能为负数,因此-1
会被转换为大数。
答案 1 :(得分:1)
sizeof
运算符返回的值类型为size_t
,指定为无符号类型(通常等效于unsigned long
)。
简单的普通整数文字,如2
或-1
始终类型为int
,int
已签名。
如果您想要无符号整数文字,则必须添加U
后缀,例如2U
。
答案 2 :(得分:0)
这是因为<html>
<title></title>
<head></head>
<body>
<?php
$hostname = "localhost";
$database = "item_sales";
$username = "root";
$password = "";
$con = mysql_pconnect($hostname, $username, $password);
error_reporting(0);
?>
<form action="index.php" method="post" enctype="multipart/form-data">
<p>Customer Name : <input type="text" name="cus_name" /><br/><br/> </p>
<p>Select an Item:
<select name="iid">
<?php
$sql = mysql_query("SELECT * FROM item");
mysql_select_db($database,$con);
while($sqlv = mysql_fetch_array($sql))
{ ?>
<option id="<?php echo $sqlv['item_id']; ?>"><?php echo $sqlv['item_name']; ?></option>
<?php } ?>
</select>
</p>
<?php
if(isset($_POST['submit']))
{
$sql2 = "SELECT * FROM item WHERE iid='%item_id%'";
mysql_select_db($database,$con);
$mydata = mysql_query($sql2);
$cus_name = $_POST['cus_name'];
$sql3 = "INSERT INTO customer (cus_id, iid, cus_name) VALUES ('', '$_POST[iid]', '$cus_name')";
mysql_query($sql3);
}
?>
<input type="submit" name="submit" value="Add Sale" />
</form>
</body>
</html>
运算符返回sizeof
中的值。这应该是一个无符号类型,通常实现为size_t
。
数字unsigned int
本身是2
,而不是int
。