user-0 提问: 问个 unsigned int菜鸟问题.

回复:
user: user-1
content: c编译器没有检测这个的功能。。。

user: user-0
content: 引用 14 楼 zxh707wk 的回复:请百度 原码 反码 补码  弄懂负数在计算机内的存储形式 come on. 我知道 负数的最高位为1.知道 反码补码. 现在我的奇怪的是 编译器的问题, 像 C#和java对应的编译器确实是就防止的呀.

user: user-0
content: 引用 13 楼 mengwuxiy 的回复:ＬＺ可以看一下二进制编码的原理，其实计算机存的时候只是负数的最高位为１罢了 come on. 我知道 负数的最高位为1. 现在我的奇怪的是 编译器的问题, 像 C#和java对应的编译器确实是就防止的呀.

user: user-2
content: 引用 14 楼 zxh707wk 的回复:请百度 原码 反码 补码  弄懂负数在计算机内的存储形式 计算机组成原理

user: user-3
content: 其实C++ 存储数据的时候是没有正负的概念。  0xff 可以理解为 255，也可以理解为 -1  看变量是 char 还是 BYTE.

user: user-4
content: 引用 7 楼 zhao4zhong1 的回复:计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-5
content: 引用 17 楼 king769147 的回复:[quote=引用 14 楼 zxh707wk 的回复:] 请百度 原码 反码 补码  弄懂负数在计算机内的存储形式 come on. 我知道 负数的最高位为1.知道 反码补码. 现在我的奇怪的是 编译器的问题, 像 C#和java对应的编译器确实是就防止的呀. [/quote]  那是编译器友好呗，编译器报什么样的warning和错误还不是人写的。

user: user-6
content: 编译器赋值时只管数值的二进制，哪管正负数

user: user-1
content: 请百度 原码 反码 补码  弄懂负数在计算机内的存储形式

user: user-7
content: ＬＺ可以看一下二进制编码的原理，其实计算机存的时候只是负数的最高位为１罢了

user: user-8
content: 引用 9 楼 king769147 的回复:[quote=引用 2 楼 T5500 的回复:] 对无符号类型赋值一个超出它表示范围的值时，结果是初始值对无符号类型表示数值总数取模后的余数。 比如，int类型为32位时，unsigned int所能表示的数值范围是0 - 4294967295，共4294967296个可能的数值：  #include <iostream>  int main() { 	unsigned int ui; 	ui = -1; 	std::cout << ui << std::endl; //输出4294967295，即：4294967296 % 1 	 	ui = 4294967296; 	std::cout << ui << std::endl; //输出0，即：4294967296 % 4294967296 	return 0; }   我有这么个印象,至少C#和java这些对应的编译器不能是这样的...所以我觉得是和编译器有关,不是和机器有关的.[/quote]  别的语言就不清楚了，反正C++就是这样。我用g++编译的，正数超范围会报一个warning，赋负数时连warning都不会提示

user: user-9
content: 引用 2 楼 T5500 的回复:  	std::cout << ui << std::endl; //输出4294967295，即：4294967296 % 1   4294967296 % 1 结果是 0

user: user-0
content: 引用 4 楼 k91191 的回复:人类发明的傻逼电脑只知道0和1，正负数是相对于十进制而言的。“unsigned int 能赋值为 负数”这句的意思是一个             unsigned int类型的变量可以存储一个负数。为啥无字符数可以存一个负数，怎么存储的。请自行搜索有符号数和             无符号之间的转换。我有这么个印象,至少C#和java这些对应的编译器不能是这样的...所以我觉得是和编译器有关,不是和机器有关的.

user: user-0
content: 引用 2 楼 T5500 的回复:对无符号类型赋值一个超出它表示范围的值时，结果是初始值对无符号类型表示数值总数取模后的余数。 比如，int类型为32位时，unsigned int所能表示的数值范围是0 - 4294967295，共4294967296个可能的数值：  #include <iostream>  int main() { 	unsigned int ui; 	ui = -1; 	std::cout << ui << std::endl; //输出4294967295，即：4294967296 % 1 	 	ui = 4294967296; 	std::cout << ui << std::endl; //输出0，即：4294967296 % 4294967296 	return 0; }   我有这么个印象,至少C#和java这些对应的编译器不能是这样的...所以我觉得是和编译器有关,不是和机器有关的.

user: user-0
content: 引用 1 楼 Intel0011 的回复:编译器赋值时只管数值的二进制，哪管正负数 我有这么个印象,至少C#和java这些对应的编译器不能是这样的...所以我觉得是和编译器有关,不是和机器有关的.

user: user-10
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！

user: user-11
content: 如果无法理解的话，用电脑上的计算器，调整为“程序员”模式，就知道-1和255的含义了

user: user-12
content: 可以的，只是会变成别的数了，你想一下有符号数最高位其实是符号位，0正1负，但是unsigned int的值编译器都会认为是正值，所以最好为的符号位也被认为是数值位了，所以，如果是负数的话将会得到一个较大的正数，因为最高位为1

user: user-13
content: 人类发明的傻逼电脑只知道0和1，正负数是相对于十进制而言的。“unsigned int 能赋值为 负数”这句的意思是一个             unsigned int类型的变量可以存储一个负数。为啥无字符数可以存一个负数，怎么存储的。请自行搜索有符号数和             无符号之间的转换。

user: user-14
content: unsigned int 能赋值为 负数 计算机的负数表示，只不过是设最高位为1罢了，